程序正确执行然后segfaults

时间:2016-01-26 05:42:17

标签: c++

在程序结束时,我的阵列打印正确,然后程序段错误。为什么呢?

#include <iostream>
#include <stdio.h>
#include <iomanip>
#include <string.h>
using namespace std;

int main(int argc, char *argv[]) {

  FILE *file = fopen(argv[1], "r");
  struct item{
    char type[9];
    int price;
    bool wanted;
  };
  item items[20]; char temp[8]; 
  for (char i = 0; i < 100; i++)
  {
    if (fscanf(file,
         "%[^,], %[^,], %d",
         items[i].type,
         temp,
         &items[i].price) != 3)
      break;
    else if (!strcmp(temp, "for sale"))
      items[i].wanted = false;
    else if (!strcmp(temp, "wanted"))
      items[i].wanted = true;
    else
      cout << "aaaagghghghghhhh!!!" << endl;
  }

  for (char i = 0; i < 100; i++)
  {
    cout << items[i].type << endl;
    cout << items[i].price << endl;
    cout << items[i].wanted << endl;
  }

}

1 个答案:

答案 0 :(得分:5)

您的数组只声明了20个空格,但您的循环变为100.也许将数组更改为100个空格。

使用

 item items[100];

溢出的数组会导致未定义的行为。在程序堆栈展开期间,您的代码可能会写入C ++运行时所需的内存中。