今兒個用C語言寫Leetcode的時候發現了這個錯誤heap-buffer-overflow ,堆緩存越界?
事故代碼是這樣的:
- 我後來稍微研究了看了一眼,發現我這一不留神沒注意就犯了炒雞愚蠢的錯誤——沒看懂numsSize,這個代表數組長度的參數
- 另外,這個代碼引出了一個問題,sizeof(nums)到底=多少?
爲此我稍微驗證了一下:
- 其實大致是知道這個大小也就一個int指針吧,不會是數組長度的,我真的搞混了,這個代碼是從Java版抄過來的。
- 驗證代碼是:
# include <stdio.h>
# include <stdlib.h>
int main(){
int *t = (int*)malloc(sizeof(int)*10);
for(int i = 0;i<10;i++){
t[i] = i;
}
int a = 0;
int lis[10];
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(t));
printf("%d",sizeof(lis));
}
- 我設立了一個指針數組,申請長度爲10,還順手做了個初始化,爲做對比,我同樣new了一個int變量,和10大小的int數組
- 分別輸出他們的sizeof,結果如下:
- 沒錯,t的長度就是個指針大小,而數組則是sizeof(int)*10,是可以算出來長度的(只要除以int長度即可)
因此這就是題目代碼給處numsSize的原因吧,我似乎一直沒有意識到這個問題
- 根據這個思想,稍微改改就通過~