Я слышал, что эта ошибка, связанная с памятью, является одной из самых неприятных ошибок памяти. Я уверен, что это связано с памятью, выделенной для некоторой структуры, которую я объявил. Ниже приводится структура, которую я использую.
struct bitmap
{
ST_INT* ps32bitmaparr;
ST_INT* ps32bitposarr;
};
typedef struct bitmap BITMAP;
BITMAP* gpbitmap;
Я выделил память для структуры в функции. Я установил указатель структуры на глобальный указатель с именем 'gpbitmap'.
pbitmap = safe_malloc(sizeof(BITMAP));
if(s32tot != 0)
{
ps32bitmaparr = safe_malloc(sizeof(ST_INT)*s32tot+1);
ps32bitposarr = safe_malloc(sizeof(ST_INT)*s32tot+1);
}
Затем я освободил память следующим образом.
if(gpbitmap != NULL)
{
sxd_process_arb_data(DataEntry->dataBuf, rt_array, rtlen, NULL, &mlog_arb_log_ctrl, NULL);
free(gpbitmap->ps32bitmaparr);
free(gpbitmap->ps32bitposarr);
free(gpbitmap);
}
Затем я Я получил эту ошибку.
malloc.c:2369: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Поскольку я работаю над встроенной системой, я точно не знаю, как использовать valgrind в этой системе. Таким образом, любой, кто может обнаружить любые возможные ошибки, был бы очень полезен.
Заранее спасибо !!