Adesso che l'hai sistemata fa un po' meno
Però ci sono ancora cose che non vanno.
line è un puntatore a un singolo char non a un array di char, quindi usarlo con le [] è sbagliato.
Questa istruzione:
codice:
line[i++] = byte;
Dovrebbe essere:
Errore che poi prosegui anche in:
codice:
char* newb = new char;
memcpy(&line[i],newb,sizeof(newb));
perchè newb è un puntatore, e una sizeof di un puntatore da la dimensione di un puntatore, non di quello a cui punta. In questo caso la dimensione è 4 (per 32bit) oppure 8 (per 64 bit).
In pratica stai forzando la memcpy a copiare 4/8 bytes, vale a dire oltre il limite massimo di line.
Corretto sarebbe:
codice:
memcpy(line,newb,sizeof(char));
ma inutile per due motivi:
1) basta fare *line = *newb;
2) cosa contiene newb? Lo crei, ne copi il contenuto indefinito da un'altra parte e poi lo cancelli.
qui vai a scrivere in una locazione che non esiste per quando scritto sopra.
Una possibile alternativa per fare quello che ti serve è questa:
codice:
char* FileTextReadLine(FILE* file)
{
unsigned char byte;
int char_read;
int count=0;
do {
char_read = fgetc(file);
if ( char_read == '\n') break;
count++; // caratteri letti.
} while (c != EOF); // Fine file?
fseek(file,0,SEEK_SET);
char* line = new line[count];
int read_byte = fread(line, count,1,file);
line[read_byte]=NULL;
return line;
}
Però tutto questo è C. In C++ tutto si risolve in tre o quattro righe.