C語言malloc初始化問題

2021-10-05 12:51:00 字數 1198 閱讀 8434

博主在刷leetcode的時候經常頭疼的是陣列初始化問題。尤其是最近,經常會遇到陣列訪問溢位的問題。

大意就是說訪問陣列下標越界了,簡直頭疼得不得了。

今天就結合例子來總結一下:

## 1374. 生成每種字元都是奇數個的字串

假如我們這樣的話:

(注意看malloc那一行**)

char

*generatethestring

(int n)

res[n-1]

='b';}

else

}return res;

}

使用這樣初始化res陣列:

char

* res =

malloc

(n *

sizeof

(char))

;memset

(res,

0, n *

sizeof

(char))

;

結果就是:一片紅,系統提示陣列訪問溢位。。。

但是,如果改為這樣的話:

char

* res =

malloc

((n+1)

*sizeof

(char))

;memset

(res ,0,

(n+1)*

sizeof

(char))

;

也就是全部**為:

char

*generatethestring

(int n)

res[n-1]

='b';}

else

}return res;

}

結果就是:

真是百思不得其解!!!!

講道理,是不需要為『\0』預留空間的,但是為什麼呢?

如果有知道的朋友歡迎指點!

C 初始化問題

1 普通變數,const static,const static 普通變數 可以再初始化鍊錶,和建構函式中初始化 const物件 或 reference物件 只能在初始化列表中初始化 static 只能在累的外面定義和初始化 const static 如果是int 型可以在類中宣告時直接初始化,其他...

C語言中的初始化問題

經常在c語言工程中,尤其是比較大的程式,執行過程中會出現由於記憶體或堆疊導致的各種問題,輸出錯誤或執行崩潰 1.字串陣列的初始化 1 char str 10 2 char str 10 3 char str 10 str 0 0 2.字元陣列的初始化 int a 5 錯誤 int a 5 只有第乙個...

C語言陣列初始化

陣列宣告時必須指明陣列元素的資料型別以及陣列中元素個數,計算機才可以為陣列預留出足夠的空間。陣列大小必須為常量。define size 10 int a 12 int b 100 c size 可以在宣告時通過初始值列表實現陣列元素初始化 int a 3 如果初始值列表中提供的元素個數少於陣列元素個...