我有一个 char 指针作为类的私有(private)成员。我需要从文件中读取记录并将其插入到类数组中。首先,我需要先获取记录数,然后在运行时创建一个 myStudent 数组。然后插入所有记录。但是当我尝试使用 set 方法初始化名称字段时,它给了我 Practise1(3278,0x7fff7287e300) malloc:error for object 0x100105578: incorrect checksum for freed object - object was probably was modified after被释放。在malloc_error_break中设置断点调试错误
如果我使用调试器逐步运行程序,它可以完美无误地运行,但是如果我正常运行它,它会给我上面的错误。 (有时有效,有时无效)
这是我的一小部分代码:
我的类.h:
class myClass{
private:
char *name;
public:
myClass();
void setName(string);
}
我的类.cpp
myClass:: myClass(){}
void myClass::setName(string x){
name = new char[x.length()+1]; //my xcode give me signal SIGBART here
strcpy(name, x.c_str());
}
主要.cpp
int main(){
myClass *classArr;
int amountRecord = getRecord(); //check the number of record and return it(assuming it return 5)
classArr = new myClass[amountRecord];
loadClassData("test.dat",classArr);
}
void loadClassData(string filename,myClass *classArr){
ifstream ins(filename,ios::in);
int counter = 0;
string className;
string temp;
if(ins.good()){
while(!ins.eof()){
className = "";
getline(ins, className,'\n');
classArr[counter].setName(className);
counter++;
}
ins.close();
}
最佳答案
问题在于阅读时如何循环(请参阅 Why is “while ( !feof (file) )” always wrong? 了解原因)。
这会导致循环迭代一次,导致您在 classArr
数组中使用越界索引,从而导致未定义的行为 和崩溃。
而是做例如while (std::getline(ins, className))
关于c++ - 动态内存分配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32155554/