【问题标题】:C Segmentation Fault (core dumped) error in code [closed]代码中的 C 分段错误(核心转储)错误 [关闭]
【发布时间】:2020-02-06 14:19:22
【问题描述】:

我正在尝试解决一个问题:

任务是-

给定一个按字典顺序排序的字符串数组,以严格的字典顺序打印其所有排列。如果两个排列看起来相同,则只打印其中一个。有关示例,请参见下面的“注释”。

完成函数 next_permutation,它按所述顺序生成排列。

例如,正确顺序的六个排列是:

ab bc cd ab cd bc 公元前 ab cd bc cd ab cd ab bc cd bc ab

注意:可能有两个或多个相同的字符串作为s的元素。

例如,s = [ab,ab,bc] 。仅应打印所有元素匹配的排列的一个实例。换句话说, ifs[0] == s1 ,然后打印 s[0] s1 或 s1 s[0] 但不能同时打印。

具有三个离散元素的三元素数组有六个排列,如上所示。在这种情况下,有三对匹配的排列,其中 s[0] = ab 和 s1 = ab 被切换。我们只打印三个明显独特的排列:

ab ab bc ab bc ab bc ab

输入格式

每个测试文件的第一行包含一个整数n,字符串数组s的长度。

接下来的 n 行中的每一行都包含一个字符串 s[i]。

样本输入 0

2 抗体 光盘

样本输出 0

ab 光盘 cd ab

this 是我写的代码。

但我遇到了分段错误(核心转储)错误

根据我的知识,当我们访问不再存在的东西时会遇到分段错误。但我不认为我会这样做。

谢谢!

【问题讨论】:

  • 请将所有内容直接放在您的帖子中
  • 请花一些时间阅读(或刷新)how to ask good questionsthis question checklist。请创建一个minimal reproducible example 以在问题本身中向我们展示。
  • 至于您的问题,您是否尝试过在调试器中捕获崩溃?通过使用调试器,您可以在崩溃发生时捕捉到崩溃,并且能够在您的代码中定位它发生的时间和位置。您还可以检查变量并在崩溃位置查看它们的值。
  • 是的,分段错误不仅令人烦恼,还可以让您了解到底发生了什么。您可以直接在调试器中捕获它,或者允许核心转储(使用ulimit -c unlimited 或类似方法)并使用调试器检查核心文件。
  • 附言。 StackOverflow 问题旨在对以后遇到相同问题的其他人有用。将所有代码放在一个链接中,这可能会腐烂并且无论如何都不能直接看到,这会破坏这一点。

标签: c pointers segmentation-fault


【解决方案1】:

您的数组遇到索引超出范围,问题出在next_permutation 函数中。

错误在这里:

for(int j = i+2; j <= n; j++)

正确的是:

for(int j = i+2; j < n; j++)

【讨论】:

  • 非常感谢。我明白了。
猜你喜欢
  • 1970-01-01
  • 2021-11-13
  • 2013-04-28
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 2022-10-13
  • 2012-11-20
  • 1970-01-01
相关资源
最近更新 更多