在C中我喜欢通过void指针使用匿名数组,但是在调试时会发生一些内存损坏。当我使用valgrind时,它会发送上述消息。
老实说,我不知道该尝试什么,因为这是一种异国情调。
struct list_t {
void* first;
void** elements;
void* last;
unsigned int max_number_of_elements;
unsigned int number_of_elements;
unsigned int counter;
void* element_current;
};
typedef struct list_t list;
typedef list* List;
List list_create(
) {
List list = malloc(sizeof(list));
list->elements = (void**)malloc(sizeof(void*) * 16 );
...
return list;
}
PS:为什么这个标记为重复,因为对于这个问题甚至没有任何明确的答案?
我明白了什么是错的。列表列表创建一个list_t *并为其分配内存。但是,sizeof(list)只为指针分配了足够的内存。您的编译器正在选择list_t *的大小,而不是list_t的大小。这意味着错误之前的行是问题所在。将其更改为:
List list = (void*)malloc(sizeof(list_t));
然后它应该工作。本地指针名称隐藏了结构名称,因此选择了错误的大小来分配。