问题标签 [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 投票
2 回答
1675 浏览

c++ - C++/GLFW - 使用 Mutex 对象的正确方法?

我正在研究一个广泛使用多线程的模拟。问题是,到目前为止,我从未使用任何互斥对象来保护我的数据。结果是我遇到了一堆分段错误。

我正在尝试在读/写时使用互斥锁锁定/解锁,但这会导致我出现另一个段错误:

当然,我创建了一个测试项目,在该项目中我应用了锁定/解锁的基本情况并且它起作用了,这是一个基本示例,展示了如何使用 GLFW 处理 Mutex 对象:

我正在工作的项目更大,我有 5 个线程在上面运行,并且同时访问了很多向量、地图、队列。在代码的某处,我尝试执行以下操作:

之所以将我的 VehicleManager:CreateVehicles() 方法放在锁定/解锁之间,是因为在此方法中有这一行:

所以我想保护向量:vehicles_。但是,结果我得到了上面的段错误。即使有:

我有同样的段错误。

我希望,我已经让自己足够清楚,让您了解我的问题的本质。我想,并不是所有人都使用过 GLFW,这就是为什么我给你第一个基本示例,以便你了解互斥锁如何与这个库一起工作。

谢谢 !

0 投票
2 回答
87211 浏览

linux - 什么是 SEGV_MAPERR?

什么是SEGV_MAPERR,为什么总是想出来SIGSEGV

0 投票
6 回答
2584 浏览

c - 在 C 中调试一个被破坏的静态变量(gdb 损坏?)

我已经做了很多编程,但在 C 语言中并不多,我需要有关调试的建议。我有一个静态变量(文件范围),在执行多线程程序(在 OS X 10.4 上使用 pthreads)大约 10-100 秒后被破坏。我的代码看起来像这样:

addr指向有效的内存地址一段时间,然后被某个值(有时为 0,有时为非零)破坏,从而在取消引用时导致段错误。gdb我已经证实,正如人们所期望的那样,它addr立即被布置在内存中some_values,所以我的第一个猜测是我使用了一个越界索引来写入some_values. 但是,这是一个很小的文件,因此很容易检查这不是问题所在。

显而易见的调试技术是在变量上设置观察点addr。但这样做似乎会在gdb. 观察点在第一次分配时被触发addr;然后在我继续执行之后,我立即在另一个线程中得到一个无意义的段错误......据说是在访问程序不同部分中的静态变量的地址时出现段错误!但是然后gdb让我以交互方式读取和写入该内存地址。

gdb显然很困惑。有谁知道为什么?或者有人对不使用观察点调试此错误有任何建议吗?

0 投票
2 回答
39267 浏览

linux - Linux: How to debug a SIGSEGV? How do I trace the error source?

My firefox started crashing since today. I haven't changed anything on the system or on firefox config.

I use
strace -ff -o dumpfile.txt firefox
to trace the problem. It's not a big help.

I see the segfault, in two of the generated process dumps, but how I can trace them to their cause?

After running for 10 seconds and crashing, 22MB of data is generated by strace.

This is a snippet of the output, where you can see actual SIGSEGV in the middle.:

0 投票
3 回答
493 浏览

image - 使用 MATLAB 操作相机的分段错误

我正在使用 Matlab 操作相机。它是IDT SharpVision相机,我使用的是公司提供的Matlab接口。当我尝试获取图像时,出现分割错误。我尝试通过为图像创建一个空数组来预分配内存,但这不起作用。

这是导致段错误的代码行:

sharpML.dll 包含一个用于控制相机的 MEX 文件。

以下是从错误消息堆栈跟踪中选择的内容:
[0] QCamChildDriver.dll:0x160fdde4(0x0f99ef08, 15, 0x00ced938, 0x00ced938)
[1] QCamDriver.dll:0x0f9c1dd8(4146, 0x00ced938, 0x00ced924, 0x11283430)
[2] sharp fadll:0x0f991d8c(2, 0x00cedf88, 2, 0x00cedfe8)
[3] sharpML.dll:0x0f991448(2, 0x00cedf88, 2, 0x00cedfe8)
... [
35] MATLAB.exe:0x00403bd2(1109972, 0, 0x7ffd9000, 0x
36] kernel32.dll:0x7c817077(0x00403daf, 0, 0x78746341, 32)

有什么建议么?制造相机的公司已经倒闭。

〜亚当

0 投票
3 回答
1345 浏览

linux - linux:“真正的”分段错误处理程序在哪里?

如果我读/写/跳转到一个未映射的地址,即。

这会导致分段错误。

我想知道,拦截对未映射地址的读/写(如何?)并抛出“用户模式”信号的系统(内核)的实际部分是什么?

0 投票
7 回答
6361 浏览

c - 当 malloc/free 出现在 C 中的循环中时出现分段错误

我有一个基本上看起来像这样的程序:

这只是骨架形式,但它希望能提供足够的图片。无论如何,它通常运行良好,但对于 n1、n2 的某些值,free(cpplptr) 似乎会导致分段错误。它只被调用一次,我在 malloc() 调用 cplptr 之后和 cplptr 的相应 free() 之前检查地址。

地址匹配,这意味着 free() 应该释放它应该释放的东西,对吧?gdb 给出程序接收到的信号 SIGSEGV,分段错误。0xb7ce179b 在?? () 来自 /lib/tls/i686/cmov/libc.so.6 和步骤找不到当前函数的边界

有没有另一种方法来实现类似的东西来避免分段错误?

感谢一百万您的建议!知道发生了什么吗?

0 投票
1 回答
1093 浏览

linux - 当给定受保护的内存时,如何让系统调用调用我的 SIGSEGV 处理程序?

我正在开发一个内存跟踪库,我们使用该库mprotect来删除对程序大部分内存的访问,并使用 SIGSEGV 处理程序在程序接触到单个页面时恢复对它们的访问。这在大多数情况下都很有效。

read我的问题是,当程序使用我的库标记为不可访问的内存调用系统调用(比如)时,系统调用只返回 -1 并设置errnoEFAULT. 这会以奇怪的方式改变正在测试的程序的行为。我希望能够在系统调用实际进入内核之前恢复对系统调用的每一页内存的访问。

我目前的方法是为每个涉及内存的系统调用创建一个包装器。在将其交给真正的系统调用之前,每个包装器都会触及给它的所有内存。这似乎适用于直接从程序发出的调用,但不适用于 libc 发出的调用(例如,freadread直接调用而不使用我的包装器)。有没有更好的方法?怎么可能得到这种行为?

0 投票
5 回答
1587 浏览

c++ - 不确定是什么导致了我的分段错误 - C++

嗨,我有一些编程经验,但我对指针不是很好。我一直在尝试调试我一直在研究的这个程序,但它一直给我一个分段错误。我的代码如下:

我的问题似乎与代码的以下部分有关:

当我编译代码并包含该部分时,它会运行程序,但最后我会遇到分段错误。但是,如果我注释掉该部分,一切运行正常并且没有分段错误。我不明白常规整数如何导致分段错误。如果有人能解释我犯了什么错误以及我在哪里犯的,我将不胜感激。提前致谢

0 投票
4 回答
63435 浏览

android - 如何捕获 SIGSEGV(分段错误)并在 Android 上的 JNI 下获取堆栈跟踪?

我正在将一个项目移动到新的 Android 本机开发工具包(即 JNI),我想捕获 SIGSEGV,如果它发生(可能还有 SIGILL、SIGABRT、SIGFPE),以便呈现一个不错的崩溃报告对话框,而不是(或之前)当前发生的情况:进程立即不客气地死亡,并且操作系统可能尝试重新启动它。(编辑: JVM/Dalvik VM 捕获信号并记录堆栈跟踪和其他有用信息;我只是想为用户提供将这些信息通过电子邮件发送给我的选项。)

情况是:我没有编写的大量 C 代码在这个应用程序中完成了大部分工作(所有游戏逻辑),尽管它在许多其他平台上经过了很好的测试,但我完全有可能在我的 Android 中端口,会给它提供垃圾并导致本机代码崩溃,所以我想要当前显示在 Android 日志中的崩溃转储(本机和 Java)(我猜在非 Android 情况下它会是标准错误)。我可以随意修改 C 和 Java 代码,尽管回调(从 JNI 传入和传出)数量约为 40,显然,小差异的奖励积分。

我听说过 J2SE 中的信号链库 libjsig.so,如果我可以在 Android 上安全地安装这样的信号处理程序,那将解决我的问题的关键部分,但我看不到 Android/Dalvik 的此类库.