标签: segmentation-fault

在C中编译并运行没有main()的程序

我正在尝试编译并运行以下程序而没有main()函数C.我使用以下命令编译了我的程序.

gcc -nostartfiles nomain.c
Run Code Online (Sandbox Code Playgroud)

编译器发出警告

/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000400340
Run Code Online (Sandbox Code Playgroud)

好的,没问题.然后,我已经运行了可执行文件(a.out),两个printf语句都成功打印,然后得到分段错误.

那么,我的问题是,为什么在成功执行print语句后出现分段错误?

我的代码:

#include <stdio.h>

void nomain()
{
        printf("Hello World...\n");
        printf("Successfully run without main...\n");
}
Run Code Online (Sandbox Code Playgroud)

输出:

Hello World...
Successfully run without main...
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

注意:

这里,-nostartfilesgcc标志阻止编译器在链接时使用标准启动文件

c gcc program-entry-point segmentation-fault gcc-warning

78
推荐指数
2
解决办法
8596
查看次数

什么是SEGV_MAPERR?

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

linux posix coredump segmentation-fault

73
推荐指数
2
解决办法
6万
查看次数

修复C++中的分段错误

我正在为Windows和Unix编写一个跨平台的C++程序.在Window端,代码将编译并执行没有问题.在Unix方面,它会编译然而当我尝试运行它时,我得到一个分段错误.我最初的预感是指针存在问题.

找到并修复分段错误错误的好方法是什么?

c++ debugging segmentation-fault

72
推荐指数
4
解决办法
9万
查看次数

什么原因导致Python分段错误?

我正在用Python实现Kosaraju的强连接组件(SCC)图搜索算法.

该程序在小数据集上运行良好,但是当我在超大图(超过800,000个节点)上运行它时,它会显示"Segmentation Fault".

可能是什么原因造成的?谢谢!


附加信息:首先,我在超大型数据集上运行时出现此错误:

"RuntimeError: maximum recursion depth exceeded in cmp"
Run Code Online (Sandbox Code Playgroud)

然后我使用重置递归限制

sys.setrecursionlimit(50000)
Run Code Online (Sandbox Code Playgroud)

但得到了"分段错误"

相信我,它不是一个无限循环,它在相对较小的数据上运行正确.该计划有可能耗尽资源吗?

python segmentation-fault large-data

70
推荐指数
5
解决办法
12万
查看次数

为什么这个RMagick调用会产生分段错误?

我一直在撞墙,试着弄清楚这里出了什么问题,我肯定(或者更希望)这是一个相当明显的东西,我忽略了.我使用的是Ruby 1.9.1,Sinatra 1.0和RMagick 2.13.1.ImageMagick和RMagick已正确安装并正常运行 - 我已成功操作并保存了来自irb的图像.

params数组的相关部分(为便于阅读而格式化更改):

{"admin_user_new_image_file"=>
    {
        :filename=>"freddie-on-shetland-pony.png",
        :type=>"image/png", 
        :name=>"admin_user_new_image_file", 
        :tempfile=>#<File:/var/folders/a7/a7pO5jMcGLCww9XBGRvWfE+++TI/-Tmp-/RackMultipart20100514-20700-o2tkqu-0>,
        :head=>"Content-Disposition: form-data; name=\"admin_user_new_image_file\"; filename=\"freddie-on-shetland-pony.png\"\r\nContent-Type: image/png\r\n"
    }
}
Run Code Online (Sandbox Code Playgroud)

相关代码:

post "/admin/user/:account_name/image/new/" do
  if params[:admin_user_new_image_file][:tempfile]
    thumbnail = Magick::Image.read("png:"+params[:admin_user_new_image_file][:tempfile].path).first
  end
end
Run Code Online (Sandbox Code Playgroud)

错误(第229行是以"thumbnail ="开头的行:

config.ru:229: [BUG] Segmentation fault
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-darwin10.3.0]

-- control frame ----------
c:0042 p:---- s:0196 b:0196 l:000195 d:000195 CFUNC  :read
c:0041 p:0121 s:0192 b:0192 l:001ab8 d:000191 LAMBDA config.ru:229
c:0040 p:---- s:0189 b:0189 l:000188 d:000188 FINISH
c:0039 p:---- s:0187 b:0187 l:000186 d:000186 CFUNC  :call
c:0038 p:0018 …
Run Code Online (Sandbox Code Playgroud)

ruby rmagick segmentation-fault sinatra ruby-1.9.1

69
推荐指数
5
解决办法
1万
查看次数

如何在Linux中捕获分段错误?

我需要在第三方库清理操作中捕获分段错误.这有时会在我的程序退出之前发生,我无法解决这个问题的真正原因.在Windows编程中,我可以使用__try - __catch执行此操作.是否有跨平台或平台特定的方式来做同样的事情?我需要在Linux,gcc中使用它.

c++ try-catch segmentation-fault

67
推荐指数
5
解决办法
10万
查看次数

您如何阅读段错内核日志消息

这可能是一个非常简单的问题,我正在尝试调试一个生成以下段错误的应用程序 kern.log

kernel: myapp[15514]: segfault at 794ef0 ip 080513b sp 794ef0 error 6 in myapp[8048000+24000]

这是我的问题:

  1. 有没有关于segfault上的差异错误号的文档,在这个例子中它是错误6,但我看到错误4,5

  2. 这些信息的含义是at bf794ef0 ip 0805130b sp bf794ef0 and myapp[8048000+24000]什么?

到目前为止,我能够使用符号进行编译,当我执行x 0x8048000+24000它时返回一个符号,这是正确的方法吗?到目前为止,我的假设如下:

  • sp =堆栈指针?
  • ip =指令指针
  • at = ????
  • myapp [8048000 + 24000] =符号的地址?

c c++ unix syslog segmentation-fault

61
推荐指数
3
解决办法
5万
查看次数

在C中生成Segfault的最简单的标准符合方式是什么?

我认为问题就是这么说的.涵盖从C89到C11的大多数标准的示例将是有帮助的.我虽然这个,但我猜它只是未定义的行为:

#include <stdio.h>

int main( int argc, char* argv[] )
{
  const char *s = NULL;
  printf( "%c\n", s[0] );
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

正如一些投票要求澄清:我希望有一个程序通常有编程错误(我能想到的最简单的是段错误),这是保证(按标准)中止.这与最小的段错误问题有点不同,它不关心这种保险.

c iso segmentation-fault

58
推荐指数
6
解决办法
2万
查看次数

分段错误的常见原因的确定列表

注意:我们有很多段错误问题,答案基本相同,所以我试图将它们折叠成一个规范的问题,就像我们对未定义的引用一样.

虽然我们有一个问题涉及分段错误是什么,但它涵盖了什么,但没有列出很多原因.最佳答案说"有很多原因",只列出一个,其他大多数答案都没有列出任何理由.

总而言之,我认为我们需要一个组织良好的社区wiki来讨论这个主题,它列出了所有常见原因(然后是一些)来获取段错误.目的是帮助调试,如答案的免责声明中所述.

我知道什么是分段错误,但是在不知道它们通常是什么样的情况下很难发现代码.虽然毫无疑问,有太多的内容无法详尽列出, C和C++ 中分段错误的最常见原因是什么?

c c++ segmentation-fault

56
推荐指数
1
解决办法
8623
查看次数

解释段错误消息

以下段错误消息的正确解释是什么?

segfault at 10 ip 00007f9bebcca90d sp 00007fffb62705f0 error 4 in libQtWebKit.so.4.5.2[7f9beb83a000+f6f000]
segfault at 10 ip 00007fa44d78890d sp 00007fff43f6b720 error 4 in libQtWebKit.so.4.5.2[7fa44d2f8000+f6f000]
segfault at 11 ip 00007f2b0022acee sp 00007fff368ea610 error 4 in libQtWebKit.so.4.5.2[7f2aff9f7000+f6f000]
segfault at 11 ip 00007f24b21adcee sp 00007fff7379ded0 error 4 in libQtWebKit.so.4.5.2[7f24b197a000+f6f000]
Run Code Online (Sandbox Code Playgroud)

linux qt kernel webkit segmentation-fault

53
推荐指数
3
解决办法
12万
查看次数