博主在刷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 如果初始值列表中提供的元素個數少於陣列元素個...