Цель кода - запоминать сообщения программы, до того момента, как будет известно имя лог-файла. Которое будет передано в виде параметра программы, или задано в конфигурационном файле. Чтобы затем эти сообщения вывести в лог-файл.#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char **msg;
int size;
//Выделяю память
if(!(msg=malloc(1)))
return 1;
//Довольно тупой генератор сообщений
int i;
for(i=0; i<10; i++)
{
//Ошибка возникает здесь
if(!(msg=realloc(msg, i+1)))
return 2;
//Выделяю память для строки размер в 1 это для эксперимента
if(!(*(msg+i)=malloc(size=1)))
return 3;
else
{
//Собственно, само сообщение
//size+=2 тоже для эксперимента
while(size<=snprintf(*(msg+i), size, "Строка №%d\n", i))
if(!(*(msg+i)=realloc(*(msg+i), size+=2)))
return 4;
//Посмотреть в какой момент происходит ошибка
printf("%s", *(msg+i));
}
}
return 0;
}
Вывод программы:
Строка №0
Строка №1
Строка №2
Строка №3
*** glibc detected *** ./test: realloc(): invalid next size: 0x00000000021a8010 ***
======= Backtrace: =========
И т.д. Что я делаю не так?