【发布时间】:2015-08-22 11:25:44
【问题描述】:
我有一个 char 指针作为类的私有成员。我需要从文件中读取记录并将其插入到类数组中。首先,我需要先获取记录数,然后在运行时创建一个 myStudent 数组。然后插入所有记录。但是当我尝试使用 set 方法初始化名称字段时,它给了我 Practise1(3278,0x7fff7287e300) malloc:error for object 0x100105578: wrong checksum for freed object - object was possible modified after被释放。在 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();
}
【问题讨论】:
-
你在这里使用字符数组而不是
std::string有什么原因? -
是的,这是我的实验室任务要求
-
关于你的问题,你“从文件中读取记录”怎么办?问题很可能出在您不显示的代码中,因为它实际上不在您显示的代码中。您应该尝试创建一个Minimal, Complete, and Verifiable Example 并向我们展示。
-
@JoachimPileborg 我已经彻底检查了这个问题,如果我定义了一个字符数组(不是指针),例如 char name[30] 它工作得很好。我猜问题出在名称指针和初始化它的方式上。
-
好的,我们可以看看这个吗?我猜问题出在某处
标签: c++ pointers memory dynamic