gpt4 book ai didi

c++ - 分段违规 : while(fgets(buffer, 15,statfile)!=NULL){};

转载 作者:行者123 更新时间:2023-11-28 07:11:19 27 4
gpt4 key购买 nike

如果按顺序寻址 r,此代码可连续调用数千次。如果 r 是随机选择的,它连续工作几百个。

但是,在随机 r 的某个点,我遇到了分段违规。我不确定是什么原因造成的,因为它几乎一直都运行良好。

*** Break *** segmentation violation
Segmentation fault

崩溃发生在 fgets。

int fsize(int r, double VME, std::string* filepath) {
FILE *statfile;
std::stringstream streamfilename;
std::stringstream streamcommand;
string* filename = new string;
std::string command;
char buffer [15];
char charsize;
streamfilename.str("");
streamfilename << *filepath << "run" << r << "-" << VME << ".dat";
*filename = streamfilename.str();
streamcommand.str("");
streamcommand << "stat -c " << "%s " << *filename;
command = streamcommand.str();
const char * charcommand = command.c_str();
statfile = popen(charcommand, "r");
cout << "Test 5\n";
while(fgets(buffer,15,statfile)!=NULL){}; CRASH OCCURS HERE
cout << "Test 6\n";
int* filesize = new int;
*filesize = atoi(buffer);
pclose(statfile);
return *filesize;
}

段错误的原因是什么?

最佳答案

statFile 可能是 NULL

如果你想获得文件大小,你应该考虑 C 函数:

 int stat(const char *path, struct stat *buf);

它将避免 fork 命令,并解析其结果。

关于c++ - 分段违规 : while(fgets(buffer, 15,statfile)!=NULL){};,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20925144/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com