C 區域性變數指標問題

2021-08-15 22:06:44 字數 807 閱讀 6959

今天同事給了一段**,說除錯有問題,讓給看看。功能是把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...