问题标签 [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.
c++ - 调试编译的可执行文件:为什么不在无效写入 NULL 时优雅地中止?
我对 C/C++ 不了解的是:
是的,每个人都使用它来获得极快的可执行文件,因此他们在打开优化的情况下进行编译。
但是对于打开调试信息的编译,我们并不关心速度。那么为什么不在该编译模式中包含更多信息,例如在它们发生之前检测一些段错误呢?assert(ptr != NULL)
实际上,在每次访问指针之前插入一个ptr
。为什么编译器不能这样做?同样,默认情况下应该关闭,但我认为应该有这种可能性。
编辑:有人说我建议的检测没有意义,或者没有做任何报告不会做的segmentation fault
事情。但是我想到的只是一个更优雅和信息丰富的中止,它会打印出问题代码的文件名和行号,就像 anassert()
会做的那样。
c - 在 C 中捕获段错误
我有一个程序有时会从指针算术中出错。我知道会发生这种情况,但我不能轻易地提前检查它是否存在段错误 - 我可以“预扫描”输入数据以查看它是否会导致段错误(这可能无法确定),或者我可以修改它以不使用指针算术,这需要大量的工作,或者我可以尝试捕获段错误。所以我的问题:
1)如何在 C 中捕获段错误?我知道操作系统中的某些东西会导致段错误,但是如果 C 程序在段错误中比仅仅更优雅地死掉,那么它可以做什么Segmentation fault
呢?
2)这有多便携?
我想这是一个非常不可移植的行为,所以如果您发布任何代码来捕获段错误,请告诉我它的工作原理。我在 Mac OS X 上,但我希望我的程序可以在尽可能多的平台上运行,我想看看我的选择是什么。
别担心 - 基本上我想做的就是打印一个更用户友好的错误消息并释放一些malloc()
ed 内存,然后死掉。我不打算只是忽略我得到的所有段错误并继续前进。
c - memset 和 SIGSEGV
我在一段代码中遇到了一个奇怪的问题。
出于某种原因,第一个 memset 调用发送了一个 SIGSEGV。更奇怪的是,在 gdb 内部,同一行执行了大约 30 次,尽管该函数只调用了一次并且内部没有循环!这是一段 gdb 会话。
程序收到信号 SIGSEGV,分段错误。
我还尝试通过 valgrind 的 memcheck 工具运行该程序,但对上述代码没有任何意义。
我正在解析的文件只有一条记录。
任何指针表示赞赏。谢谢。
multithreading - boost::thread: 运行优化版本时的段错误
boost:thread
我上班有困难。在没有优化的情况下编译时运行良好:
但是使用优化编译的版本会崩溃
有谁知道可能是什么原因?
这是我正在使用的代码:
PS:我在 ubuntu linux 上使用 boost 1.32。
更新:
这是它在调试器中崩溃的地方(第 37 行是thread_2.join();
我原始代码中的行):
这是我实际的两个功能:
谢谢你的帮助!
c - 将 int 成员添加到 C 结构会导致段错误
我还在学习 C,并且已经开始使用它来生成图像。我不知道为什么我的一个程序会出现段错误。这是源代码,减少到 40 行:
它编译并运行良好(在 Ubuntu 上使用 gcc,在带有 Cygwin 的 Vista 上使用),但取消注释处理 img->o 的两行会破坏它。我感觉它与上一个问题有关,但我正在 malloc'ing 所有需要 malloc'ed 的东西(我认为)。任何帮助,将不胜感激。
c - HP-UX 中的堆损坏?
我试图了解在 HP-UX 11.11 中运行导致 SIGSEGV(11,分段错误)的程序出了什么问题:
问题似乎发生在 libc 内部的某个地方!系统调用跟踪结束于:
程序的最后一条指令:
这是系统的问题,还是我遗漏了什么?任何深入挖掘的指导将不胜感激。
谢谢。
ubuntu - 机器经常出现段错误
当我使用 apt-get 安装或升级我的 Ubuntu hardy 系统时,我经常收到这样的消息:
它不会一直发生,因此如果您重试足够多,通常可以完成任务,但它确实会在很大一部分时间出现段错误。
知道发生了什么或如何解决它吗?
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.
c++ - 为什么我不能为指针赋值?
在阅读了常见问题解答和我能找到的所有其他内容之后,我仍然感到困惑。如果我有一个以这种方式初始化的 char 指针:
char *s = "Hello world!"
该字符串位于只读内存中,我无法像这样更改它:
制作“Wello world!”。我明白这一点,但我不能,就我的一生,了解如何使它不是只读的。我必须使用数组而不是指针吗?喜欢这里吗?
这是我的代码:
错误消息只是一个分段错误。如果这是一个非常愚蠢的问题,请提前道歉。
非常感谢所有的帮助。在听取了你所有的建议后,我明白了:
但是,函数末尾的删除似乎导致了它们自己的分段错误。为什么?
为了兴趣起见:错误是由于在递增后访问 e 和 s 指针。一个更简单的解决方案随之而来:
c++ - 为什么 g++ 编译这个?
最近很累,写了如下代码:
其中,当然应该是:
(注意方括号而不是括号。)
据我所知,第一种形式无效,但 g++ 编译了它。当然,它吐出了一个完全无法理解的段错误,但它编译了。
为什么?