Newsgroup: it.comp.lang.c++
Titolo: HELP :Problemi di buffer

Ringraziando anticipatamente per l'attenzione , vi spiego il mio (forse
stupido) problema.
Ho un programmino in C++ in cui alloco 3 Megabyte di memoria per un buffer
di tipo char* , con una normale malloc.
Il mio scopo e' quello di appendere a questo buffer una serie di "chunk" di
2048 bytes presi tramite una serie di fread da un file. Il problema e' ke al
128esimo chunk (ossia dopo 256 Kb) il programma esce con un "questa
programma ha eseguito
un'operazione non valida e sara' terminato" ...
Quale potrebbe essere il problema ? Come posso risolverlo ?
Ecco il codice "incriminato":
Grazie.
----------------------------------------
#include <stdio.h>
#include <iostream.h>
#include <malloc.h>
#define MAX_SEQ  1880
#define CHUNK_SIZE  2048
void main (){
    char *buffer;
    struct {
   char *data;
   int   tag;
  } buffers[MAX_SEQ];
   char seq=0 ;
   char *pos;
   FILE *file;
   int countt=0 ,nread ;
   file = fopen("c:\\Tool_Sober.avi", "rb");
 buffer = (char*) malloc(MAX_SEQ*(CHUNK_SIZE));
  while(seq  <= MAX_SEQ/2) {
        pos=buffer+(CHUNK_SIZE)*seq;
        nread = fread (pos,CHUNK_SIZE,1,file);
        buffers[seq].tag=1;
        buffers[seq].data= pos;
        seq++;
        countt++;
 }
}
Antonio

 
Se seq è un char e MAX_SEQ/2 == 1024, la clausola del ciclo while sarà
sempre vera.
Max

 wrote in message
Pine.LNX.4.10.101081...@c64.comm2000.it...

Ho debuggato il tutto , ed il problema pare essere un altro. Anche ponendo
la corretta while (countt <= MAX_SEQ/2) il programma si blocca al tentativo
di porre la 128-esima chunk sul buffer.
Sto impazzendo :o(
Antonio

 di porre la 128-esima chunk sul buffer.
Direi che Max c'e' andato vicino, ma non ha colto nel segno. Se char e'
come sospetto dotato di segno, quando seq vale 127 il suo incremento da'
con ogni probabilita' un numero negativo.
Ciao,
Nicola

 di porre la 128-esima chunk sul buffer.
Uhm... se seq è un char non potrà mai assumere il valore di 128.
Dichiara seq come int, non c'è ragione che sia un char.
Max

 di tipo char* , con una normale malloc.
Non mi sembra C++  il tuo codice.
Forse avrai + fortuna sul newsgroup per il C,
non che non ti si possa dare qui una risposta,
ma se si facesse cosi' si dovrebbe rispondere anche
a quelli che postano circa VC++, Borland etc etc.
Che so, avessi usato un new al posto di una malloc.....
si lo so che hai usato "seq++" e non "seq = seq + 1"
ma non basta, perche' poi non "++seq" ?
Aspetta ora Nicola con il suo.....
-- 
Posted from [194.214.173.28] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Aspetta ora Nicola con il suo.....
Beh, alla lettera dello standard il suo codice e' conforme, anche se non
funzionante. Certo, se avesse utilizzato funzionalita' specifiche di
C99... :-)
Ciao,
Nicola

 wrote in message
Pine.LNX.4.10.101081...@c64.comm2000.it...

Grazie mille....Avete colto proprio nel segno .
A presto !
Antonio

 C99... :-)
curiosa l'informatica! Stroustrup si e' fatto un c**o cosi' per rendere il 
C++ il piu' possibile compatibile con il C, poi arrivano questi qua dello 
standard e lo cambiano ;-))
Anto
PS: cmq meglio se iniziano ad essere due linguaggi diversi: immagino ci 
sara' molta meno confusione.
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 standard e lo cambiano ;-))
Penso che il c**o cosi' se lo sia fatto per far si che si potesse passare da
uno all'altro gradualmente, non per far scrivere programmi in C++ scritti in
C.


 C.
Beh, in origine uno degli obbiettivi espliciti era anche evitare di
introdurre differenze fuorvianti per i programmatori, tanto che
nell'introduzione di TC++PL Stroustrup si vanta del fatto che
praticamente tutti gli esempi di K&R2 sono compilabili in C++.
Questo non e' detto che resti vero nel caso uscisse K&R3...
Ciao,
Nicola