malloc在函數內分配內存問題
阿新 • • 發佈:2018-07-20
fun 沖突 get malloc函數 c函數 sed oid size pre
malloc函數用法可參考:C語言中 malloc函數用法
代碼:
void fun(char * p)
{
p=(char *)malloc(100);
}
void main()
{
char *p;
fun(p);
char s[]="hello world";
strcpy(p,s);
cout<<p<<endl;
}
找出代碼錯誤之處。
不能通過這樣的方式申請動態內存,申請的內存首地址無法通過形參傳遞出去(形參只做實參的值復制)。
VS2010下運行,出現錯誤:Run-Time Check Failure #3 - The variable ‘p‘ is being used without being initialized.
將main函數中 char *p; 修改為 char *p=NULL; 依舊是錯誤的。
【XXXXX中的 0x100cd2e9 (msvcr100d.dll) 處有未經處理的異常: 0xC0000005: 寫入位置 0x00000000 時發生訪問沖突】
要正確申請動態內存,可將程序修改為:
void main()
{
char *p;//char *p=NULL;
p=(char *)malloc(100);
char s[]="hello world";
strcpy(p,s);
cout<<p<<endl;
free(p);
}
malloc在函數內分配內存問題