我有一个char指针作为类的私有成员。我需要从文件中读取记录并将其插入到类数组中。首先,我需要先获取记录数,然后在运行时创建一个myStudent数组。然后插入所有记录。但是当我尝试使用set方法初始化name字段时,它给了我 Practise1(3278,0x7fff7287e300)malloc:对象0x100105578的错误:释放对象的错误校验和 - 对象可能在修改后被释放。在malloc_error_break中设置断点以调试错误
如果我使用调试器一步一步地运行程序,它完全正常,没有错误,但是如果我正常运行它,它给了我上面的错误。 (有时它可以工作,有时它不会)
以下是我的代码的一小部分:
myClass.h:
class myClass{
private:
char *name;
public:
myClass();
void setName(string);
}
myClass.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());
}
的main.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();
}
答案 0 :(得分:1)
问题在于你在阅读时如何循环(参见Why is “while ( !feof (file) )” always wrong?了解原因)。
这导致循环迭代一个额外的时间,导致您使用越界索引到classArr
数组,这导致未定义的行为和崩溃。
相反,例如while (std::getline(ins, className))
答案 1 :(得分:0)
在函数void myClass::setName(string x)
中,您正在使用一个名为sName
的变量。
我不知道它在哪里声明,但你应该使用函数中传递的变量x
。
答案 2 :(得分:0)
sName来自何处?我认为它应该是这样的。
myStudent::myStudent(){}
void myStudent::setName(string x){
name = new char[x.length()+1]; //my xcode give me signal SIGBART here
strcpy(name, x.c_str());
}