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

问题描述 投票:-5回答:1

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

c linux segmentation-fault
1个回答
1
投票

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

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

  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。经验法则是,你不应该拥有任何这些,除非你在完成审查后绝对确定它是有原因的。大多数时候,总有一种更好的方法可以避免它。任何此类错误都会导致您遇到问题或其他未来问题。
© www.soinside.com 2019 - 2024. All rights reserved.