動態記憶體初始化方法問題
来源:7-7 动态内存分配【突破面试高频考点】

阿寶1118
2021-01-01
老師,我發現要初始化動態記憶體,可以直接這樣初始化 也不會發生影片中的報錯,是為什麼呢?
我的開發環境是Win10 VSCode+minGW(32bits),實際代碼如下:
#include <stdio.h>
#include <stdlib.h>
//大陸地區
//stack —>棧
//heap —>堆
void InitPointer(int *ptr,int len,int default_value){ //動態記憶體的指標,動態記憶體長度,初始值
for(int i=0;i<len;i++){
ptr[i]=default_value;
}
}
int main(){
//動態記憶體分配(動態陣列)—>會配置在heap(堆)區—>不會被銷毀—>程序員自行管理
//使用malloc(size_t)方法配置 動態型記憶體(生命週期開始)
int num;
scanf("%d",&num);
//配置num個int大小的動態記憶體(以指標型態呈現)
int *players=malloc(sizeof(int)*num);
//malloc配置的動態記憶體是不會被初始化的,要自己做初始化
InitPointer(players,num,0);
//賦值
// for(int i=0;i<num;i++){
// players[i]=i+1;
// }
//驗證
for(int j=0;j<num;j++){
printf("%d ",players[j]);
}
//使用free(指標)--->釋放記憶體(生命週期結束)
free(players);
return 0;
}
執行結果:
写回答
2回答
-
你是说initpointer的参数是直接用指针而不是指针的指针是吧。你要注意我是在函数InitPointer内部调用的 malloc,而你在是外部调用的,这里会有差异。
012021-01-02 -
阿寶1118
提问者
2021-01-01
補充發問:
我這樣的寫法在函式中的ptr是main中的player還是其實已經複製一份了呢?
032021-01-02
相似问题