考虑下面的代码:malloc和堆在C
#include "list.h"
struct List
{
int size;
int* data;
};
List *list_create()
{
List *list;
printf("%d %d",sizeof(list),sizeof(List));
list = malloc(sizeof(list));
assert(list != NULL);
if (list != NULL) {
list->size = 0;
}
return list;
}
印出数为“4 8”,我相信这是由“INT大小”在列表对象所采取的4个字节和大小“int * data”为0是什么都没有分配给数据? int指针的大小也是4字节,所以类型List共占用8个字节?还是还有其他的事情呢?有人能帮我详细了解这一切吗?
然后malloc()从堆中获取4个字节并将地址分配给指针列表?后来主要如果我做“list-> data [i] = 1;”这会给我一个运行时错误为什么?是否因为我不能改变堆中的内容?但如果我做“列表 - >大小++”这将工作, 是不是整个列表对象是在堆?
真的需要这里一些帮助提前
感谢。
如果sizeof(struct List)''怎么办? – Aif
您的运行时错误是因为您尚未初始化任何指针。你也需要为它分配空间。 – Ryan
这里没有运行时错误。 –