全域性變數會變 的原因 (全域性陣列內容異常)

2021-08-29 18:31:26 字數 495 閱讀 7262

3、12月19日  全域性變數的值會變的原因

定義了乙個全域性變數:char chlchar[1]=;

結果發現在程式的執行當中,即使沒有對它進行賦值,它的值一樣會變。

分析發現:原來是uart3_rx_buf[uart3_rx_maxlen] 填滿後沒有做uart3_rx_len=0;處理,

導致其越界了依然繼續填裝,占用了chlchar[1]的空間。

在程式中加了這一句後,問題解決:

if(uart3_rx_len>=uart3_rx_maxlen)

uart3_rx_len=0;

接收程式:

uart3_rx_buf[uart3_rx_len] = uca3rxbuf;

uart3_rx_len++;

if(uart3_rx_len>=uart3_rx_maxlen)

uart3_rx_len=0;

回想:以前定義的乙個全域性陣列在執行中,單元內的內容出現期望外的值,估計和這個有關。

static全域性 區域性變數,全域性變數及區域性變數

1 static變數和全域性變數都是分配在 靜態儲存區 2 static全域性變數 static區域性變數 全域性變數和區域性變數區別 他們都是分配在 靜態儲存區內,都是在程式開始的時候初始化的,他們的區別是作用域不同,static全域性變數作用域是在申明所在的檔案中,而全域性變數是全域性的,其他檔...

static全域性變數與普通的全域性變數

一 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是...

全域性變數與靜態全域性變數的異同

參考 1 生存週期 變數從定義到銷毀的時間範圍。存放在全域性資料區的變數的生存週期存在於整個程式執行期間,而存放在棧中的資料則隨著函式等的作用域結束導致出棧而銷毀,除了靜態變數之外的區域性變數都存放於棧中。2 作用域 變數的可見 域 塊作用域,函式作用域,類作用域,程式全域性作用域 3 static...