gpt4 book ai didi

c++ - "pointer being freed was not allocated"

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:12 24 4
gpt4 key购买 nike

#include <iostream>
#include <fstream>
#include <cmath>
#include <string>
#include <sstream>

using namespace std;

class CFile {
public:
CFile(string filename);
~CFile();
void ReadFile();
void WriteFile(string outputFilename);
void Calculate();
string m_filename;
int m_numberInput;
double* m_xData;
double* m_yData;
int m_numberOutput;
double* m_xDataOut;
double* m_yDataOut;
};

CFile::CFile(string filename)
{
m_filename = filename;
string line;
ifstream myfile(m_filename.c_str());

if (myfile.is_open())
{
getline(myfile,line);
myfile.close();
stringstream Str;
Str << line;
Str >> m_numberInput;
m_xData = new double[m_numberInput];
m_yData = new double[m_numberInput];
cout << sizeof(m_xData) / sizeof(m_xData[0]) << endl;
}
else cout << "Unable to open file.\n";
}

CFile::~CFile()
{
delete[] m_xData;
delete[] m_yData;
m_xData = 0;
m_yData = 0;
delete[] m_xDataOut;
delete[] m_yDataOut;
m_xDataOut = 0;
m_yDataOut = 0;
}

void CFile::ReadFile()
{
ifstream infile(m_filename.c_str());
string line;

if (infile.is_open())
{
int x, y, i = 0;

while (getline(infile,line))
{
infile >> x >> y;
m_xData[i] = x;
m_yData[i] = y;
i++;
}
infile.close();
}
else cout << "Unable to open file.\n";
}

void CFile::WriteFile(string outputFilename)
{
ofstream outfile(outputFilename.c_str());

if (outfile.is_open())
{
for(int i=0; i < m_numberInput; i++)
outfile << m_xDataOut[i] << " " << m_yDataOut[i] << endl;

outfile.close();
}
else cout << "Unable to open file.\n";
}

void CFile::Calculate()
{
m_xDataOut = new double[m_numberInput];
m_yDataOut = new double[m_numberInput];

for(int i=0; i < m_numberInput; i++)
{
m_xDataOut[i] = m_xData[i];
m_yDataOut[i] = sqrt(m_yData[i]);
}
}


int main()
{
CFile file("Input.dat");
file.ReadFile();
file.Calculate();
file.WriteFile("Output.dat");
file.~CFile();
}

错误信息如下:

main(11915,0x7fff77d3d310) malloc: *** error for object 0x7f8a99403940: pointer 
being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

具有讽刺意味的是,这段代码在几周前运行良好。我改变了操作系统和编译器,现在它不再存在了。我在其他线程中读到了这个错误,但无法真正理解如何在我的代码中使用这些解决方案。代码读入一个数据文件,做某事。用它,然后将更改的值写入另一个文件。哪里配置错误?非常感谢您的帮助! :-)

最佳答案

您的析构函数被调用了两次。您显式调用它,并且在退出 main() 时也会调用它。您应该删除显式析构函数调用。

关于c++ - "pointer being freed was not allocated",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21404152/

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