gpt4 book ai didi

c++ - *** 检测到 glibc *** free() : invalid pointer:

转载 作者:搜寻专家 更新时间:2023-10-31 00:17:37 25 4
gpt4 key购买 nike

我完全不知道上述 glibc 错误的原因。我一定遗漏了一些明显的东西,但每次以下程序(由 4 个文件组成)退出时它都会出现:

TankSim.h:

#ifndef TANKSIM_WDECAY_TANKSIM_H_
#define TANKSIM_WDECAY_TANKSIM_H_

#include <cstdlib>
#include <iostream>

#include "Parser.h"

int main();

#endif

坦克模拟器.cpp:

#include "TankSim.h"

using std::cout;
using std::endl;

int main()
{
const Settings gGlobals = ParseConfig();

return(0);
}

解析器.h:

#ifndef TANKSIM_WDECAY_PARSER_H_
#define TANKSIM_WDECAY_PARSER_H_

#include <cstdlib>
#include <vector>
#include <fstream>
#include <sstream>
#include <iostream>

struct Settings {
double speedlight;
double refractiveindex;
double absorptionchance;
double pmtradius;
double photspermetre;
double tankradius;
double tankheight;
long unsigned int randomseed;
double scatterangle;
std::vector<double> entrypoint;
std::vector<double> entrydrn;
};

Settings ParseConfig();

#endif

解析器.cpp:

#include "Parser.h"

using std::string;
using std::vector;
using std::cout;
using std::endl;

Settings ParseConfig()
{
Settings settings;

std::ifstream configfile("settings.dat");

string line;
while(getline(configfile,line)){
//Comments start with %
if(line.find("%") != string::npos){
cout << "Comment: " << line << endl;
continue;
}

//Read in variable name.
std::stringstream ss;
ss << line;
string varname;
ss >> varname;
string value = line.substr(varname.length()+1);
cout << varname << "-" << value << endl;
}
}

由于我没有明确调用任何删除运算符,所以我不知道为什么会发生错误。

最佳答案

很可能是缺少返回语句。

然后在您的 main 方法中,Settings 本地对象永远不会被初始化。然后它的作用域结束,其中的 vector 的析构函数被调用,它们认为它们有一个指针(因为它们是用内存中的垃圾初始化的)并在它们的指针上调用 delete。

添加 -Wall 以启用所有警告将在未来告诉您。

关于c++ - *** 检测到 glibc *** free() : invalid pointer:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12960430/

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