2

我正在尝试以下代码,但失败并出现以下错误:

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;
    }    
}
4

2 回答 2

1

我看不出代码有任何明显错误。正在进行一些不必要的复制(各种操作员应该DataType &(实际上,最好是const DataType &)而不是像现在那样使用对象以防止对象被复制。我也会删除包含 stdio.h 的内容,因为您不需要对于您在此处显示的代码。

但是,以上都不应触发您看到的错误。您是否还有其他代码没有向我们展示?

于 2010-02-24T07:01:02.623 回答
0

代码在我看来没问题 - 我会说问题来自其他地方(可能是安装问题?)你确实有一些不是很好的部分,但没有什么会导致重大问题(例如DataType::getKey从未使用过,operator<(DataType, DataType)从未使用过,operator<<可能应该采用 const 引用而不是值)。

于 2010-02-24T06:18:36.953 回答