malloc 跟 free
一般來說要將函式結果回傳是不能用 pointer,因為一旦函式結束 stack 的空間就會被釋出,所以 pointer 會指向的資料是危險的。這時就會先動態地宣告一個位址給 pointer,但這類的記憶體會被存放在 heap 而非 stack,所以開發者必須自行釋放。
- pointer.c
void
showMalloc(int pointerValue)
{
int *p = malloc(sizeof(int));
printf("Address : %p\n", p);
printf("Value : %d\n", *p);
*p = pointerValue;
printf("Address : %p\n", p);
printf("Value : %d\n", *p);
free(p);
}
Address : 00682B90
Value : 6826496
Address : 00682B90
Value : 100
calloc
會幫你初始值的 malloc
- pointer.c
void
showMalloc(int pointerValue)
{
int *p = calloc(1, sizeof(int));
printf("Address : %p\n", p);
printf("Value : %d\n", *p);
*p = pointerValue;
printf("Address : %p\n", p);
printf("Value : %d\n", *p);
free(p);
}
Address : 00722B90
Value : 0
Address : 00722B90
Value : 100
參考資料 :
https://openhome.cc/Gossip/CGossip/MallocFree.html
0 意見:
張貼留言