在Linux机器上运行C代码时出现分段错误(核心转储)[关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Linux机器上运行C代码时出现分段错误(核心转储)[关闭]相关的知识,希望对你有一定的参考价值。

如果使用visual studio在Windows机器上运行C代码,则分段不会显示,输出也是预期的。注意:代码中有很多用于内存分配和释放的指针。指针的使用深度很高(最多3级)。 可能是什么问题呢??在gdb中调试C代码也非常困难,因为它只显示哪个函数抛出了seg错误而不是代码中的行。

答案

您还没有真正提供足够的信息。这里的人们需要更多的信息,以便能够帮助你。如果有更多细节,我会更新答案。

这几乎是你现在可以做的。

  1. 尝试缩小问题范围,并在此处发布。当然,你对C的经验有限,没关系。但是你可能没有意识到,你给出的关于你的程序的细节,如指针的“大量使用”,或“指针指针”(3级)等,适用于每个真实世界的C程序。查找您看到segfault的函数。
  2. 你确定你的it works on windows, but not linux的结论吗?或者它只是一个间歇性的失败(有时随机工作/失败)。尝试在Windows和Linux上使用不同的输入(如果可能)多次运行它以确保。
  3. 发布一些细节,比如您在Windows vs Linux上使用的编译器。根据我的经验,我看到字符串分配与不同编译器的工作方式不同。
  4. 如果可能的话,尝试发布可重复的代码片段,程序中的一小段代码,可以独立运行,并显示类似的错误。或者至少发布代码部分和seg故障的堆栈跟踪。这就是人们最有可能帮助你的方式。
  5. 如果您的程序正在生成有关分段错误的核心文件,请了解如何使用gdb进行分析,如果您还没有这样做的话。它提供了非常详细的信息。如果核心文件没有生成,或者它不完整/已损坏。在启动程序之前在终端上运行ulimit -c unlimited,或将此行放在〜/ .bashrc文件中。
  6. 了解如何使用valgrind。使用valgrind运行程序,查看生成的报告是否显示和invalid readsinvalid writes。经验法则是,你不应该拥有任何这些,除非你在完成审查后绝对确定它是有原因的。大多数时候,总有一种更好的方法可以避免它。任何此类错误都会导致您遇到问题或其他未来问题。

以上是关于在Linux机器上运行C代码时出现分段错误(核心转储)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

当我在 Linux 上运行使用硬浮点选项构建的 Neon 代码时出现分段错误

运行我的代码时出现分段错误(核心转储)问题

为 OpenCV 的 C++ createTrackbar 运行 C 包装器时出现编译分段错误(核心转储)

运行 C++ 代码时出现分段错误

我运行程序时出现“分段错误(核心转储)”

在opencv c ++中查找图像卷积时出现分段错误(核心转储)错误