【发布时间】:2017-11-02 21:45:06
【问题描述】:
好的,这些是我的结构:
struct Student
{
int id;
char* name;
};
struct HashTable
{
int size;
int noElements;
Student** elements;
};
这里我为动态数组分配内存
ht.elements = (Student**)malloc(size*sizeof(Student*));
memset(ht.elements, NULL, size*sizeof(Student*));
我的问题是,当我尝试像这样释放内存时,为什么我的程序会崩溃?
for(int i=0;i<ht.size;i++)
{
free(ht.elements[i]->name);
free(ht.elements[i]);
}
free(ht.elements);
如果我只写最后一行它可以工作,但它不会产生内存泄漏?
【问题讨论】:
-
@πάνταῥεῖ 这是无效的 C.
-
@user2079303 所以也应该删除 c 标签 ;-)
-
@πάνταῥεῖ 好主意! (这可能会保护问题免受一波反对票)@CanciuCostin,请说明您使用的是哪种语言。
-
@CanciuCostin 你没有显示数据成员名指向的内存分配在哪里,是否确实分配了。
-
@CanciuCostin 考虑到要使程序成为有效的 C 程序,您必须至少编写 struct Student** 元素;
标签: c arrays memory-leaks dynamic-memory-allocation