Я работаю над Solaris 5.8, C++, используя анализатор Json.
Проблема в следующем: при парсинге файла размером более 700 МБ процесс вылетает с ошибкой дампа ядра. Это примерно происходит в нижней кодовой точке -
int printbuf_memappend(struct printbuf *p, char *buf, int size)
{
char *t;
if(p->size - p->bpos <= size)
{
int new_size = json_max(p->size * 2, p->bpos + size + 8);
if (!(t = realloc(p->buf, new_size)))
return -1;
p->size = new_size;
p->buf = t;
}
memcpy(p->buf + p->bpos, buf, size); // CORE DUMP HERE
p->bpos += size;
p->buf[p->bpos]= '\0';
return size;
}
Не могли бы вы помочь определить проблему? Файл дампа ядра содержит только копируемые данные. Может ли увеличение оперативной памяти быть решением? Или мне нужно ограничить размер файла до 700 МБ?
realloc()
потерпел бы неудачу. Проблема, вероятно, в другом месте вашей программы, и она повредила память, поэтому здесь что-то не работает. Использовали ли вы какие-либо инструменты отладки, такие какvalgrind
? - person Barmar   schedule 07.11.2012Segmentation violation'. Or when you load the core dump into
gdb`, он сообщит вам причину остановки программы. Пожалуйста, вернитесь назад и начните отлаживать свою программу с помощью соответствующих инструментов, здесь мы ничем не можем вам помочь, пока вы не проанализируете ее должным образом. - person Barmar   schedule 07.11.2012