程序正确执行,然后出现段错误

Program executes correctly then segfaults

本文关键字:段错误 错误 执行 然后 程序      更新时间:2023-10-16

在程序结束时,我的数组正确打印出来,然后程序出现段错误。为什么?

#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;
  }
}

你的数组声明只有 20 个空格,但你的循环是 100 个。也许将您的数组更改为具有 100 个空格。

 item items[100];

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