#include "stdio.h"
#include "string.h"
#include "windows.h"
void GetMemory(char *cpStr)
{
cpStr = new char[100];
return;
}
void Test(void)
{
char *cp_str = NULL;
GetMemory(cp_str);
strcpy(cp_str,"Hello,world!");
printf(cp_str);
return;
}
void main()
{
Test();
}
請問程式會發生什么情況?以及詳細解釋產生此種情況的原因?
uj5u.com熱心網友回復:
void GetMemory(char *&cpStr){
cpStr = new char[100];
return;
}
uj5u.com熱心網友回復:
Test函式的(char *)cp_str也即GetMemory函式的實參和GetMemory函式的形參(char *)cpStr是兩個不同的變數,它們是傳值的(把實參的NULL傳給了形參cpStr),然后形參的cpStr得到了分配的緩沖區首地址(GetMemory函式回傳cpStr變數無效緩沖區就丟失了造成記憶體泄露),并沒有影響實參cp_str(仍然為NULL),然后strcpy(cp_str,"Hello,world!");失敗。把GetMemory函式的形參改成參考就可以了,void GetMemory(char *&cpStr),其它不變。
uj5u.com熱心網友回復:
會出現記憶體泄漏,原因是你只分配了記憶體而沒有釋放它。uj5u.com熱心網友回復:
程式會崩。原因2,3樓已經給出,至于修改,鑒于你程式的頭檔案參考形式是經典C,而不是C++,你的編譯器可能無法認識參考語法,你就把傳值改為傳址就行了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/75941.html
標籤:基礎類
