動態記憶體初始化方法問題

来源: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回答

bennyhuo

2021-01-01

你是说initpointer的参数是直接用指针而不是指针的指针是吧。你要注意我是在函数InitPointer内部调用的 malloc,而你在是外部调用的,这里会有差异。

0
1
阿寶1118
非常感谢!
2021-01-02
共1条回复

阿寶1118

提问者

2021-01-01

補充發問:

我這樣的寫法在函式中的ptr是main中的player還是其實已經複製一份了呢?

0
3
bennyhuo
回复
阿寶1118
对的~
2021-01-02
共3条回复

C语言系统化精讲 重塑编程思想 打造坚实的开发基础

如果通向大牛的道路有捷径,那就是先学好C语言

2208 学习 · 853 问题

查看课程