【问题标题】:Seg fault in for loop?for循环中的段错误?
【发布时间】:2016-07-27 16:49:27
【问题描述】:

这是我的 for 循环

string inputName;
int inputNumServices;
string inputServices[20];
do
{
  cin >> inputName;
  if(inputName != "$")
  {
    cin >> inputNumServices;
    for(int i = 0; i < inputNumServices; i++)
    {
      cin >> inputServices[i];
    }
    cout << "success";
  }
}

在将所有输入放入 for 循环后,它给了我一个段错误。我知道是因为它在段错误之前没有打印出“成功”

【问题讨论】:

  • 如何声明inputServices
  • 定义“所有输入”。运行此程序时键入的数字是多少。
  • 如果您输入的元素超过 20 个,则会出现段错误。我建议改用std::vector
  • 并且,看在上帝的份上,检查您的 IO 成功/失败
  • 您发布的内容对我来说看起来不错(如果 inputNumServices &lt;= 20)。我的猜测是段错误稍后发生,但是您看不到成功输出,因为您没有刷新cout。您需要通过调试器运行代码并发布minimal reproducible example

标签: c++ segmentation-fault


【解决方案1】:

当我把它放入test.cc

#include <iostream>
using namespace std;
int main() {
  string inputName;
  int inputNumServices;
  string inputServices[20];
  // I removed the "do" here, as commented by Nicky C
  {
    cin >> inputName;
    if(inputName != "$")
    {
      cin >> inputNumServices;

      for(int i = 0; i < inputNumServices; i++)
      {
        cin >> inputServices[i];
      }
      cout << "success";
    }
  }

  return 0;
}

并使用g++ test.cc -o test -Wall -Wextra 编译我可以毫无问题地执行test。 (除了我看到凯文指出的缺少的endl。)

如果输入超过 20 个,则会出现段错误(正如已经指出的,因为数组只有 20 个元素)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2017-09-13
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多