malloc函數用法可參考:C語言中 malloc函數用法 及 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); }