Leetcode 報出:AddressSanitizer: heap-buffer-overflow on address所引出的問題思考

今兒個用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的原因吧,我似乎一直沒有意識到這個問題

  • 根據這個思想,稍微改改就通過~
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章