我正在尝试以下代码,但它失败并出现以下错误:
malloc: *** error for object 0x10000d8c0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Program received signal: “SIGABRT”.
以下是文件input.txt的内容:它具有完全权限,并且在调试器中成功打开了文件。请帮忙。
Jacob Anderson
Michael Thomson
Joshua Smith
Mathew Matheis
Ethan Evans
Emily Drake
Emma Patterson
Madison McPhee
Hannah Briens
Ashley Schmidt
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
#include <list>
#include <fstream>
#include <string>
#include <stdio.h>
using namespace std;
struct DataType {
string lastname; // (Key) Student's Last Name
string firstname; // Student's First Name
string getKey () const
{ return lastname; } // Returns the key field
};
ostream& operator << (ostream& os, DataType myData) {
os<<myData.firstname<< " "<<myData.lastname;
return os;
}
bool operator < (DataType lhs, DataType rhs) {
if (lhs.firstname < rhs.firstname)
return true;
return false;
}
int main() {
ifstream studentFile ("input.txt"); // Student file
list <DataType> students; // Students
DataType currStudent; // One Student (has firstname,lastname)
if (! studentFile.is_open())
{
return -1;
}
while (studentFile >> currStudent.firstname >> currStudent.lastname) {
students.push_back(currStudent);
}
list<DataType>::iterator i = students.begin();
while (i != students.end()) {
cout << *i << endl ;
++i;
}
}
答案 0 :(得分:1)
我看不出任何明显错误的代码。正在进行一些不必要的复制(各种运算符应该采用DataType &
(实际上,最好是const DataType &
)而不是现在的对象,以防止复制对象。我还将删除包含stdio.h,因为你在这里显示的代码不需要它。
但是,以上都不会触发您所看到的错误。你还没有向我们展示其他任何代码吗?
答案 1 :(得分:0)
代码看起来对我好 - 我说这个问题来自其他地方(可能是安装问题?)你确实有一些不太好的部分,但没有什么可能导致重大问题(例如从不使用DataType::getKey
,从不使用operator<(DataType, DataType)
,operator<<
应该使用const引用而不是值。)