考慮下面的代碼: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
這裏沒有運行時錯誤。 –