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的原因吧,我似乎一直没有意识到这个问题

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