我在堆栈上使用的内存非常少,而且我没有递归,并且所有内存访问都在堆栈中。那么为什么我会遇到段错误呢?
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
int main(int argc, char *argv[]){
FILE *file = fopen("test.cpp", "r");
struct item{
char *type;
int price;
bool wanted;
};
item items[100]; char *temp;
if (file)
cout << "works up to here" << endl;
fscanf(file,
"%s, %[for sale wanted], %d",
items[0].type,
temp,
&items[0].price);
}
打印出来
works up to here
Segmentation fault (core dumped)
答案 0 :(得分:2)
您正在传递未初始化的{x: 100, y: 1}
指针。你需要做这样的事情:
(如果你使用C)
{y: 1, x: 100}
(如果您实际使用的是C ++)
fscanf
答案 1 :(得分:1)
scanf()
函数不会分配任何内存。从它的外观来看,你将未初始化的指针传递给fscanf()
,其中函数需要足够大小的数组。
很可能你会使用像
这样的东西items[0].type = new char[100];
char temp[20];
if (3 == fscanf("%100s, %[for sale wanted], %d",
items[0].type,
temp,
&items[0].price)) {
// deal with a read item
}
else {
// deal with an input error
}
(我不太熟悉fscanf()
对中间格式说明符有信心。)
答案 2 :(得分:0)
您是否检查file
指针是否为空?
如果文件成功打开,则该函数返回指向 一个FILE对象,可用于在将来标识流 操作
否则,返回空指针。
正如凯文所说,这更像是C而不是C ++
答案 3 :(得分:0)
我看到了几个问题。
fopen()
是否成功。items[0].type
。最好使用std::ifstream
和std::string
,而不是使用FILE*
和char*
。