问题标签 [segmentation-fault]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
788 浏览

c++ - 调试编译的可执行文件:为什么不在无效写入 NULL 时优雅地中止?

我对 C/C++ 不了解的是:

是的,每个人都使用它来获得极快的可执行文件,因此他们在打开优化的情况下进行编译。

但是对于打开调试信息的编译,我们并不关心速度。那么为什么不在该编译模式中包含更多信息,例如在它们发生之前检测一些段错误呢?assert(ptr != NULL)实际上,在每次访问指针之前插入一个ptr。为什么编译器不能这样做?同样,默认情况下应该关闭,但我认为应该有这种可能性。

编辑:有人说我建议的检测没有意义,或者没有做任何报告不会做的segmentation fault事情。但是我想到的只是一个更优雅和信息丰富的中止,它会打印出问题代码的文件名和行号,就像 anassert()会做的那样。

0 投票
8 回答
13890 浏览

c - 在 C 中捕获段错误

我有一个程序有时会从指针算术中出错。我知道会发生这种情况,但我不能轻易地提前检查它是否存在段错误 - 我可以“预扫描”输入数据以查看它是否会导致段错误(这可能无法确定),或者我可以修改它以不使用指针算术,这需要大量的工作,或者我可以尝试捕获段错误。所以我的问题:

1)如何在 C 中捕获段错误?我知道操作系统中的某些东西会导致段错误,但是如果 C 程序在段错误中比仅仅更优雅地死掉,那么它可以做什么Segmentation fault呢?

2)这有多便携?

我想这是一个非常不可移植的行为,所以如果您发布任何代码来捕获段错误,请告诉我它的工作原理。我在 Mac OS X 上,但我希望我的程序可以在尽可能多的平台上运行,我想看看我的选择是什么。

别担心 - 基本上我想做的就是打印一个更用户友好的错误消息并释放一些malloc()ed 内存,然后死掉。我不打算只是忽略我得到的所有段错误并继续前进。

0 投票
4 回答
3468 浏览

c - memset 和 SIGSEGV

我在一段代码中遇到了一个奇怪的问题。

出于某种原因,第一个 memset 调用发送了一个 SIGSEGV。更奇怪的是,在 gdb 内部,同一行执行了大约 30 次,尽管该函数只调用了一次并且内部没有循环!这是一段 gdb 会话。

程序收到信号 SIGSEGV,分段错误。

我还尝试通过 valgrind 的 memcheck 工具运行该程序,但对上述代码没有任何意义。

我正在解析的文件只有一条记录。

任何指针表示赞赏。谢谢。

0 投票
2 回答
3398 浏览

multithreading - boost::thread: 运行优化版本时的段错误

boost:thread我上班有困难。在没有优化的情况下编译时运行良好:

但是使用优化编译的版本会崩溃

有谁知道可能是什么原因?

这是我正在使用的代码:

PS:我在 ubuntu linux 上使用 boost 1.32。

更新:

这是它在调试器中崩溃的地方(第 37 行是thread_2.join();我原始代码中的行):

这是我实际的两个功能:

谢谢你的帮助!

0 投票
4 回答
3465 浏览

c - 将 int 成员添加到 C 结构会导致段错误

我还在学习 C,并且已经开始使用它来生成图像。我不知道为什么我的一个程序会出现段错误。这是源代码,减少到 40 行:

它编译并运行良好(在 Ubuntu 上使用 gcc,在带有 Cygwin 的 Vista 上使用),但取消注释处理 img->o 的两行会破坏它。我感觉它与上一个问题有关,但我正在 malloc'ing 所有需要 malloc'ed 的东西(我认为)。任何帮助,将不胜感激。

0 投票
4 回答
2844 浏览

c - HP-UX 中的堆损坏?

我试图了解在 HP-UX 11.11 中运行导致 SIGSEGV(11,分段错误)的程序出了什么问题:

问题似乎发生在 libc 内部的某个地方!系统调用跟踪结束于:

程序的最后一条指令:

这是系统的问题,还是我遗漏了什么?任何深入挖掘的指导将不胜感激。

谢谢。

0 投票
4 回答
1739 浏览

ubuntu - 机器经常出现段错误

当我使用 apt-get 安装或升级我的 Ubuntu hardy 系统时,我经常收到这样的消息:

它不会一直发生,因此如果您重试足够多,通常可以完成任务,但它确实会在很大一部分时间出现段错误。

知道发生了什么或如何解决它吗?

0 投票
5 回答
1200 浏览

c++ - Why do I get a segmentation fault (core dumped) when I try to allocate a 4D array?

I'm trying to allocate a large 4D matrix but I want to do it dynamically. When I just create the static matrix everything works fine so I know I have enough memory for now. However when I try and implement the same thing dynamically it breaks whenever I enter the third dimension and I need to get to a fourth! Can anyone tell me why this code does not work?

I have tried many different variations on this code, and even used malloc instead of new, but I cannot get it working. Any help will be greatly appreciated.

0 投票
6 回答
5352 浏览

c++ - 为什么我不能为指针赋值?

在阅读了常见问题解答和我能找到的所有其他内容之后,我仍然感到困惑。如果我有一个以这种方式初始化的 char 指针:

char *s = "Hello world!"

该字符串位于只读内存中,我无法像这样更改它:

制作“Wello world!”。我明白这一点,但我不能,就我的一生,了解如何使它不是只读的。我必须使用数组而不是指针吗?喜欢这里吗?

这是我的代码:

错误消息只是一个分段错误。如果这是一个非常愚蠢的问题,请提前道歉。

非常感谢所有的帮助。在听取了你所有的建议后,我明白了:

但是,函数末尾的删除似乎导致了它们自己的分段错误。为什么?

为了兴趣起见:错误是由于在递增后访问 e 和 s 指针。一个更简单的解决方案随之而来:

0 投票
4 回答
449 浏览

c++ - 为什么 g++ 编译这个?

最近很累,写了如下代码:

其中,当然应该是:

(注意方括号而不是括号。)

据我所知,第一种形式无效,但 g++ 编译了它。当然,它吐出了一个完全无法理解的段错误,但它编译了。

为什么?