1. 程式人生 > >malloc在函數內分配內存問題

malloc在函數內分配內存問題

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在函數內分配內存問題