Моя функция заключается в следующем:malloc.c: 3096: SysMalloc: утверждение не удалось
void Insert_ldb(int t){
struct node_ldb *temp_ldb1,*lastnode_ldb;
temp_ldb1=root_ldb[t];
while(temp_ldb1->next!=NULL)
temp_ldb1=temp_ldb1->next;
if(temp_ldb1->next==NULL){
lastnode_ldb=malloc(sizeof(*lastnode_ldb));//error appears at this line
temp_ldb1->next=lastnode_ldb;
}
}
и структура node_ldb определяется как:
struct node_ldb{
int sno;
int *lvar;
int *object;
struct node_ldb *next;
};
На не компиляции ошибок нет появляется, но на выполнение он заканчивается сообщением:
malloc.c: 3096: sYSMALLOc: Утверждение
(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)
не выполнено. Aborted
Странная деталь заключается в том, что одна и та же функция успешно выполняет много раз до прекращения. Возможно ли, что ошибка произошла где-то в другом месте? Потому что даже valgrind не показывает никакой ошибки для того же самого. В чем может быть проблема?
'temp_ldb1 = root_ldb [t];' Есть ли гарантия, что этот указатель никогда не будет NULL (или недействителен)? – wildplasser
@wildplasser Спасибо за исправление. Я думал, что '* lastnode_ldb' вызывает разыменование, что не так. – Mahesh
Нет, sizeof is _mostly_ оператор времени компиляции. Для ВЛА есть разные отличия. BTW (для OP) есть ли VLA? Добавьте определение структуры к вопросу. – wildplasser