- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 C 的新手,我发现了 gcc 的一个特殊输出,我很难深入了解它。运行应用程序时的错误是:
*** 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.
我对此做了一些研究,这似乎很多时候是由于将太大的值放入数组中引起的,例如;我没有做那样的事。
这是我的示例代码以供引用:
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 }
最佳答案
2
在
struct student record[2];
不是top index,是元素个数。您似乎知道索引从零开始,这意味着上述数组的有效索引为 0
和 1
。越界会导致未定义的行为。
关于c - 在 GCC 中检测到 Stack Smashing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44443277/
我需要将对象的引用传递给构造函数。我在构造函数中传递了一个引用,但它给出了这个错误:Member "Smash::smash"is not a type name. 粉碎.h: #pragma onc
我看到很多答案,比如 this , 和 this网上说要用otool命令检查 stack_chk_guard和 stack_chk_fail在项目上。 问题是,我不知道 otool 必须应用到哪个文件
我正在尝试像描述的那样进行缓冲区溢出 here ,直到我暴力强制它才找到返回指针的偏移量,我发现它是21。继此stackoverflow post ,我得到了以下内存转储: (gdb) r 21 Th
我正在尝试连接两个字符串,然后在 UNIX 环境中进行系统调用。该程序执行了我想要的操作,但终止并出现错误 *** 检测到堆栈粉碎 *** 为什么会发生这种情况? 这是我的代码: main(int a
请解释在运行程序后堆栈粉碎的以下结果,其中我提供的输入远远超过字符数组的容量。 *** stack smashing detected ***: ./a.out terminated
我写了一个非常简单的 C++ 程序来生成随机字符串。在执行以下代码时,它会给出“检测到堆栈粉碎”。 #include #define SIZE 30 using namespace std; int
我正在尝试从 Smashing the Stack for Fun and Profit 做一个例子在 C 中,但我有点卡在某个点上,以下是代码(我有一台 64 位机器和 Ubuntu 64 位):
我正在使用从单个文件读取并使用 sprintf 将该数据写入多个文件的 C 程序,我在某处出错了,但我真的不知道在哪里这会导致此错误: *** stack smashing detected ***
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
这个问题已经有答案了: 奥 git _a (10 个回答) 已关闭 9 年前。 我正在用 C 语言编程并使用 gcc 进行编译。每次编译时,我都会收到堆栈粉碎检测到的错误。这是什么意思以及如何解决它?
所以我允许一个人测试我的 Socket 程序,他们通过消息将其设置为段错误: *** 检测到堆栈粉碎 ***:./myProgram 已终止 据我所知,这是一个 gcc 编译器功能,可以检测堆栈何时变
下面是一个名为 scrabble.c 的程序的代码片段,该程序用于玩该游戏的简化版本。用户会收到 7 个随机字符,然后被告知使用这些字符输入一个单词。我在使用接受用户输入并将其存储在数组中的函数时遇到
#include #include int main() { char str[] = "my name is khan. and i am not a terrorist\n";
我对 C 语言有非常初步的了解(尽管我确实了解一般的编程概念)。我的任务是创建一个缓冲区溢出,它会产生一些东西(比如访问未授权区域、免费资金等),而不仅仅是让程序崩溃。 我已经尝试过不同大小的缓冲区,
我需要使用 malloc 分配一个数组,并且我必须从输入中读取一些数字。这是我的代码: #include #include void read(int **array, int *array_si
这是我的代码。 struct ar { char array[10]; }b; void func() { char array[10]; scanf("%s",b.array
考虑以下非常基本的程序,它已以多种形式出现在此处的其他问题上。 #include int main() { char message[8]; strcpy(message, "Hel
这个问题不太可能帮助任何 future 的访客;它仅与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这些情况通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the
我需要知道在哪里可以更改咒语的范围 - THAIL SMASH 71077 关于这个咒语,我在 C++ 代码中唯一能看到的是: events.ScheduleEvent(EVENT_TAIL_SMAS
当执行下面的代码时,我得到一个Stack Smashing错误。 const uint size = 62; ... for (int i=0; i < 10; ++i){ // mask =
我是一名优秀的程序员,十分优秀!