问题标签 [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.
linux - 如何将 /var/log/messages 中的段错误指令指针地址映射到 .map 文件中的地址/函数?
(我的环境是 64 位 Ubuntu,我的应用程序是 C++ 编译并与 g++ 链接。)
当应用程序执行诸如除以零或asm("int $3")
在代码中运行 left 之类的操作时,以下内容之一将通过 syslog 记录到/var/log/kern.log
and /var/log/messages
:
.map
在这两种情况下,指令指针地址都指向我可以在链接时生成的文件中轻松查找的内容(使用“ -Wl,-Map,output.map
”)。
但是,如果我导致段错误,在这种情况下,通过调用memcpy()
将源设置为 NULL,指令指针超出范围,我不知道它应该如何映射:
在这个例子中,我预计 IP 在 0x445e70-0x445e7f 的范围内,根据我的 .map 文件,这是 memcpy() 的位置。
我的问题:在这种情况下解释 ip 的技巧是什么?
c++ - std::string::assign() 导致段错误
我有一个std::vector<uint8_t>
包含特定偏移量的字符串。这是一个缩短的转储:
我正在尝试在偏移量 136 处提取数据并将其放入std::string
:
但是,这会导致我的应用程序出现段错误。现在我对 Linux 下的软件开发还很陌生,但我确实知道如何在 GDB 中启动我的应用程序并获得回溯,并在此处跟踪问题:
打印vec.size()
返回 200,甚至循环遍历向量并打印数据对我没有任何问题(正好在崩溃的片段之上!)。
我正在使用 g++ 4.3.4 在 Debian 中编译。关于这个问题可能是什么的任何指示?
c - malloc() 如何导致 SIGSEGV?
我的程序中有一个奇怪的错误,在我看来 malloc() 导致了 SIGSEGV,据我所知,这没有任何意义。我正在为动态列表使用一个名为 simclist 的库。
这是一个稍后引用的结构:
这是代码:
list_init
是程序失败的地方,这里是 list_init 的代码:
该行l->spareels = (struct list_entry_s **)malloc(SIMCLIST_MAX_SPARE_ELEMS *
是根据堆栈跟踪导致 SIGSEGV 的位置。我正在使用 gdb/nemiver 进行调试,但不知所措。第一次调用此函数时它工作正常,但第二次总是失败。malloc() 如何导致 SIGSEGV?
这是堆栈跟踪:
非常感谢任何帮助或见解!
c - fclose() 导致分段错误
我有一个正在解析的制表符分隔的文本文件。它的第一列包含格式为 的字符串chrX
,其中X
表示一组字符串,例如“1”、“2”、...、“X”、“Y”。
在解析文件时,这些每个都存储在char*
被调用的 中。chromosome
文本文件按字典顺序在第一列排序,即,我将有许多行以“chr1”开头,然后是“chr2”等。
在每个“chrX”条目中,我需要打开另一个与该条目关联的文件:
我的功能openSourceFile
定义如下:
问题是我的应用程序在以下行退出时出现从第一个染色体到第二个染色体(从chr1
到chr2
)的分段错误,我关闭了我打开的第一个染色体文件:
我知道我没有传递fclose
NULL 指针,因为直到出现分段错误,我才从这个文件中读取数据。我什至可以将它包装在一个条件中,但我仍然得到错误:
此外,我知道openSourceFile
有效(至少对于chr1
,在设置 的第一个文件句柄时FILE*
),因为我的应用程序解析行并正确地从源文件chr1
中读取数据。FILE*
这个fclose
调用导致分段错误发生的原因是什么?
c++ - 使用列表的此 C++ 代码出现分段错误的原因是什么?
我有一些复杂的 C++ 代码,但问题缩小到在push_back
结构列表上执行:
我已经评论了 的所有数据成员,struct cache_page
但错误仍然存在。如果我评论该push_back
行,则没有错误。
可能是什么原因?
我尝试过使用GDB并且错误发生在_List_Node_base::hook()
函数中。
我有一个什么都不做的复制构造函数。我在 cache_page 中没有数据成员。
debugging - 什么是 segfault rip/rsp 编号以及如何使用它们
当我的 linux 应用程序崩溃时,它会在日志中生成一行,例如:
0000000 处的段错误 rip 00003f32a823 rsp 000123ade323 错误 4
那些 rip 和 rsp 地址是什么?我如何使用它们来查明问题?它们是否对应于“objdump”或“readelf”输出中的某些内容?如果我的程序将其符号剥离(到一个单独的文件,可以使用 gdb 使用),它们是否有用
java - JNI 分段错误错误
有一个名为 ocamorph 的形态分析器(开源,用 OCml 编写)。在此处下载并制作说明
java绑定有问题,我必须修复它,经过几个小时的努力,现在在我看来,修复它需要几天时间,因为我不熟悉C、JNI、OCml和这个特别的软件。
在这里您可以看到对于一个小文件 (subtitles_136.hu.tok) 它可以工作,但对于一个较大的文件 (Tolkien_1.hu.tok) 会引发“分段错误”:
这是 Java 绑定的 C 部分(/ocamorph/src/bindings/java/src/c/hunmorph_jnistub.c)。这可能是错误的部分,感谢任何提示或帮助找到错误:
这是Java部分(/ocamorph/src/bindings/java/src/java/mokk/nlp/ocamorph/OcamorphWrapper.java):
c++ - 等待调试器崩溃?
当断言失败或存在分段错误时,发生以下情况之一将非常方便:
- 程序询问是否运行调试器。
- 程序等待崩溃,直到附加调试器。
- 程序留下了一些东西(核心转储?),我们可以从这一点恢复执行并进行调查。
由于平台、语言和调试器的多样性,这个问题非常笼统。我问的是 C++,我猜 Windows (VS)、Linux (gdb)、Mac (gdb?) 解决方案对社区最有用。我对 Linux + gdb 感兴趣。
c - C中的指针初始化和字符串操作
- 我有这个函数,它从 main() 调用了大约 1000 次。当我使用 malloc() 在这个函数中初始化一个指针时,会发生段错误,可能是因为我在离开函数之前没有 free() 它。现在,我在返回 main 之前尝试了 free() 指针,但它没有用,最终发生了 seg 错误。
- 上述情况是一回事,我如何初始化双指针(**ptr)和指向指针数组的指针(*ptr[])?
- 有没有办法将字符串(它是一个 char 数组)复制到一个 char 指针数组中。字符 arr[]; (假设有 50 个这样的数组) char *ptr_arr[50]; 现在我想在 *ptr_arr[] 中指向每个这样的 char arr[] 我如何在这里初始化 char *ptr_arr[]?
- C中未初始化的指针有什么影响?
- strcpy() 是自己附加 '\0' 还是我们必须手动附加?strcpy() 与 strncpy() 相比有多安全?与 strcat() 和 strncat() 一样明智。
谢谢。
c++ - 插入优先级队列时出现分段错误
我对优先队列的定义是:
我在做:
进入 3-4 个节点后,我遇到了分段错误。
mynode
不是空的。
我该如何解决?