今天同事給了一段**,說除錯有問題,讓給看看。功能是把int型別變數轉換為16進製制字串列印輸出。
問題描述:輸出全為亂碼。
一開始的時候,也沒看出是什麼問題,
在inttohex函式裡面吧buffer列印出來,沒有問題。
可是在main中的printf(「%s」, b);倒全是亂碼了。
後來想了想,發現 buffer是個區域性變數,位於堆疊,在每次跳出inttohex函式後,記憶體會被釋放掉,導致資料不為實際內容。
只需要把buffer作為全域性變數或者改為靜態變數,則就不用擔心記憶體會被釋放掉。
原問題**如下:
#include
#include
#include
using
namespace
std;
char *inttohex(int aa)
int main()
下面是作為全域性變數修改後的結果:
#include
#include
char buffer[3] = ; /*全域性變數*/
C 函式返回區域性變數指標的問題
講這個問題之前要先簡單講一下c 的記憶體管理。更詳細的內容可以參考這篇文章 c 記憶體管理 c 程式的記憶體被分為堆 heap 棧 stack 全域性 靜態儲存區,自由儲存區和常量儲存區。1 堆 heap new的都存放在這裡,屬於動態分配,如果在程式中呼叫delete釋放掉,那麼將一直存在,直到程...
C 形參,區域性變數,靜態區域性變數區別
一.形參是一種自動物件,函式開始時為形參申請記憶體空間,呼叫函式時提供的實參初始化形參對應的自動物件 二.普通變數對應的自動自動物件,定義變數的語句出建立自動物件,所在塊結束,該變數也就結束 三.區域性靜態變數比較特殊,它的生命週期貫穿函式呼叫及之後的時間,區域性靜態變數對應的物件成為區域性靜態物件...
返回區域性變數的問題
函式返回區域性變數,是返回區域性變數的值。但指標 或位址 是一種特殊的值,所以返回區域性指標變數需要特別注意。正確情況下,作為函式返回值的區域性指標,其所指向物件的作用域應該是呼叫者作用域 全域性或靜態常量區 指向棧空間物件的指標作為返回值,存在潛在的錯誤。1.返回區域性值變數 函式返回時,將返回a...