【问题标题】:Stack smashing detected. What it means and how can I fix it?检测到堆栈崩溃。这是什么意思,我该如何解决?
【发布时间】:2022-12-13 07:55:23
【问题描述】:

我想要的数组中唯一的元素是那些我正在转换为 1 的元素,但由于某种原因,当我在下部导航时,这个堆栈粉碎发生了。

```
#include <stdio.h>
#define tam 12

int main(void) {
  int i, j;
  int matriz[tam][tam]={{0,0,0,0,0,0,0,0,0,0,0,0},
                        {0,0,0,0,0,0,0,0,0,0,0,0},
                        {0,0,0,0,0,0,0,0,0,0,0,0},
                        {0,0,0,0,0,0,0,0,0,0,0,0},
                        {0,0,0,0,0,0,0,0,0,0,0,0},
                        {0,0,0,0,0,0,0,0,0,0,0,0},
                        {0,0,0,0,0,0,0,0,0,0,0,0}, 
                        {0,0,0,0,0,0,0,0,0,0,0,0},
                        {0,0,0,0,0,0,0,0,0,0,0,0},
                        {0,0,0,0,0,0,0,0,0,0,0,0},
                        {0,0,0,0,0,0,0,0,0,0,0,0},
                        {0,0,0,0,0,0,0,0,0,0,0,0}};
  int controle = 0, controle2 = 0;

  for(i = 0; i<6;i++){
    for(j=i;j<tam-i;j++){
      matriz[tam-(i)][tam-(j+1)]=1;
      matriz[i-1][j]=1;
    }
  }
  for(i=0;i<tam;i++){
    for(j=0;j<tam;j++){
      printf("%i ", matriz[i][j]);
    }
    printf("\n");
  }
}
```
`
```

【问题讨论】:

  • 您确定您的数组查找始终在正确的范围 0..11 内吗? i-1i=0 时似乎很糟糕。
  • 这就是堆栈粉碎的意思?如果是这样,我必须确认。
  • 这意味着你开始使用你不应该接触的内存,在这种情况下是堆栈本身。

标签: c


【解决方案1】:

matriz[tam-i] 将在 i = 0 时解析为 matriz[12]。这是越界写入,也是bug的来源

【讨论】:

  • 还有一些其他人,比如第一次迭代中的matriz[0-1][0]=1
猜你喜欢
  • 2017-05-16
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多