Поэтому я сделал эту функцию, которая получает неизвестное количество строк и добавляет их в массив строк.
char **receiveCode(int socket){
int line = 0;
size_t lines = 1;
size_t size = 1;
char** code = malloc(sizeof(char)*size);
while(1){
package_struct *aPackage = receivePackage(socket);
if(aPackage->type=='F'){break;}
size = size + aPackage->size;
code = realloc(code, size);
code[line] = malloc(sizeof(char)*aPackage->size);
strcpy(code[line],aPackage->package);
line++;
lines++;
free(aPackage);
}
code = realloc(code, size + 2);
code[line] = malloc(sizeof(char)*3);
code[lines]=NULL;
return code;
}
Иногда, когда я запускаю этот код, я получаю следующую ошибку
* glibc обнаружен ./pp: realloc(): неверный следующий размер: 0x00007f0f88001220 **
Что, по словам Вальгринда, и происходит в этой функции.
Вероятно, я использую слишком много mallocs и reallocs... хотя не уверен.
ptr=realloc(ptr,size)
, если только вас действительно не волнует, если сбой перераспределения приведет к утечке вашей ранее выделенной памяти. Назначьте временный и перезапишите указатель prev только в случае успеха, если вам это небезразлично. - person WhozCraig   schedule 22.11.2012