C ++: сбой программы с дампом ядра в [memcpy]

Я работаю над 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 МБ?

0

Решение

Если в memcpy произошел сбой, у вас есть два варианта
что-то не так с вводом или выводом.

Чтобы протестировать второй вариант, добавьте memset после realloc:

    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;
memset(p->buf + p->bpos, 0, size);

В Linux (зависит от конфигурации) возможно выделить не существующую виртуальную память.
Реальное распределение происходит после первого использования. Может ли то же самое произойти на вашем солярисе? relloc return ok, но у системы действительно недостаточно памяти? memset должен дать ответ на этот вопрос.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]