首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC的堆碎检测

GCC的堆碎检测
EN

Stack Overflow用户
提问于 2017-06-08 18:39:05
回答 3查看 4K关注 0票数 1

我对C很陌生,我发现gcc的一个奇特的输出让我很难找到答案。运行应用程序时出现的错误是:

代码语言:javascript
复制
*** stack smashing detected ***: /home/joshua/Research/cml/test terminated

Program received signal SIGABRT, Aborted.
0x00007ffff7a43428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
54  ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.

我已经对此做了一些研究,看起来这是由于将太大的值绑定到数组中而造成的,例如,我没有做任何类似的事情。

下面是我的示例代码供参考:

代码语言:javascript
复制
 1 #include <stdio.h>
  2 #include <string.h>
  3  
  4 struct student
  5 {
  6      int id;
  7      char name[10];
  8      float percentage;
  9 };   
 10  
 11 int main()
 12 {
 13      int i;
 14      struct student record[2];
 15      
 16      // 1st student's record
 17      record[0].id=1;
 18      strcpy(record[0].name, "Raju");
 19      record[0].percentage = 86.5;
 20      
 21      // 2nd student's record         
 22      record[1].id=2;
 23      strcpy(record[1].name, "Surendren");
 24      record[1].percentage = 90.5;
 25      
 26      // 3rd student's record
 27      record[2].id=3;
 28      strcpy(record[2].name, "Thiyagu");
 29      record[2].percentage = 81.5;
 30      
 31      for(i=0; i<3; i++)
 32      {
 33          printf("     Records of STUDENT : %d \n", i+1);
 34          printf(" Id is: %d \n", record[i].id);
 35          printf(" Name is: %s \n", record[i].name);
 36          printf(" Percentage is: %f\n\n",record[i].percentage);
 37      }   
 38      return 0;
 39 }    
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-08 18:40:38

中的2

代码语言:javascript
复制
struct student record[2];

不是最上面的索引,而是元素的数量。正如您所知道的,索引从零开始,这意味着对于上面的数组,有效的索引是01。越界会导致未定义的行为。

票数 5
EN

Stack Overflow用户

发布于 2017-06-08 18:40:22

代码语言:javascript
复制
struct student record[2];

您有一个大小为2的数组,并且试图在其中存储3个元素。数组索引从0到n-1。record[2]是一个无效的索引。

票数 2
EN

Stack Overflow用户

发布于 2017-06-08 21:47:53

为了检查函数的完整性,返回语句Gcc旁边添加了保护变量(称为金丝雀),这些变量知道values.In的情况--当对record2执行未初始化的访问时,您违反了堆栈完整性,金丝雀值被覆盖,从而触发了崩溃。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44443277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档