有關記憶體的思考題
學習林銳高質量C++/C 程式設計指南
[@more@]
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
請問執行Test 函式會有什麼樣的結果?
答:程式崩潰。
因為GetMemory 並不能傳遞動態記憶體,
Test 函式中的 str 一直都是 NULL。
strcpy(str, "hello world");將使程式崩
潰。
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
請問執行Test 函式會有什麼樣的結果?
答:可能是亂碼。
因為GetMemory 返回的是指向“棧記憶體”
的指標,該指標的地址不是 NULL,但其原
現的內容已經被清除,新內容不可知。
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
請問執行Test 函式會有什麼樣的結果?
答:
(1)能夠輸出hello
(2)記憶體洩漏
void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf(str);
}
}
請問執行Test 函式會有什麼樣的結果?
答:篡改動態記憶體區的內容,後果難以預
料,非常危險。
因為free(str);之後,str 成為野指標,
if(str != NULL)語句不起作用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/219138/viewspace-915435/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於 PHP 記憶體溢位的思考PHP記憶體溢位
- 關於虛擬機器記憶體和JVM記憶體設定的思考虛擬機記憶體JVM
- 關於java記憶體訪問重排序的思考Java記憶體排序
- Java記憶體模型FAQ(五)舊的記憶體模型有什麼問題?Java記憶體模型
- project中的堆疊記憶體,記憶體地址引用,gc相關問題Project記憶體GC
- 關於PHP記憶體洩漏的問題PHP記憶體
- iOS 記憶體管理相關面試題iOS記憶體面試題
- 軟體研發之道——有關軟體的思考
- 關於redis記憶體分析,記憶體優化Redis記憶體優化
- [20191220]關於共享記憶體段相關問題.txt記憶體
- [效能]【JVM】關於JVM記憶體的N個問題JVM記憶體
- Chrome 再次最佳化記憶體佔用問題,新增記憶體釋放開關Chrome記憶體
- JavaScript變數,資料和記憶體的相關問題JavaScript變數記憶體
- 關於dataWithContentsOfFile 讀取大檔案的記憶體問題記憶體
- 排查Java的記憶體問題Java記憶體
- 對jvm虛擬機器 記憶體溢位的思考JVM虛擬機記憶體溢位
- 大魚思考---有關190億$的思考
- golang的記憶體相關內容Golang記憶體
- 關於JavaScript的記憶體機制JavaScript記憶體
- [20191223]關於共享記憶體段相關問題3.txt記憶體
- 記憶體優化相關記憶體優化
- 關於autoreleasepool記憶體管理記憶體
- 關於JVM 記憶體的 N 個高頻面試問題!JVM記憶體面試
- [20190320]關於使用smem檢視記憶體使用的問題.txt記憶體
- 日誌導致jvm記憶體溢位相關問題JVM記憶體溢位
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- 記Java中有關記憶體的簡單認識Java記憶體
- 造成記憶體洩漏的操作有哪些?記憶體
- 探究 iOS 記憶體問題iOS記憶體
- SQLServer記憶體問題分析SQLServer記憶體
- 記憶體管理篇——實體記憶體的管理記憶體
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- 【JVM故障問題排查心得】「記憶體診斷系列」JVM記憶體與Kubernetes中pod的記憶體、容器的記憶體不一致所引發的OOMKilled問題總結(下)JVM記憶體OOM
- 【JVM故障問題排查心得】「記憶體診斷系列」JVM記憶體與Kubernetes中pod的記憶體、容器的記憶體不一致所引發的OOMKilled問題總結(上)JVM記憶體OOM
- JS中的棧記憶體、堆記憶體JS記憶體
- 告別記憶體OOM,解決MySQL記憶體增長問題記憶體OOMMySql
- Redis記憶體——記憶體消耗(記憶體都去哪了?)Redis記憶體
- 解決golang 的記憶體碎片問題Golang記憶體
- CPU、記憶體、磁碟IO之間的關係記憶體