我正在使用Json解析器處理Solaris 5.8,C++。C++:程序在[memcpy]處發生核心轉儲崩潰
問題是:解析文件的大小大於700 MB時,進程崩潰,核心轉儲錯誤。 它大致出現在下面的代碼點 -
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;
}
能否請您幫助確定問題?核心轉儲文件僅包含正在複製的數據。可以增加RAM來解決嗎?或者我需要將文件大小限制爲700MB?
如果內存不足是問題,那麼'realloc()'會失敗。問題可能在你的程序中的其他地方,並且它損壞了內存,所以在這裏失敗了。你有沒有使用過像valgrind這樣的調試工具? – Barmar
不,我不太瞭解調試。 我做過幾次使用大小爲250MB,500MB,650MB,700MB,750MB的文件的測試。 該進程終止於700MB。 此外,該進程僅在memcpy函數期間終止。 – user1805010
僅僅因爲它在這裏終止並不意味着問題出在這個函數中。內存損壞留下的時間炸彈幾乎可以在程序中的任何地方消失。這個函數本身看起來很好,所以你需要使用調試工具來解決問題。 – Barmar