c++ - 动态内存分配错误

标签 c++ pointers memory dynamic

我有一个 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/

相关文章:

c - 在另一个函数中分配内存的变量

c++ - Pimpl 成语内存使用

python - 从 MySQL 写入文件时出现内存问题

c++ - 我应该如何格式化我的 .dat 文件以便制作 3D vector 图?

c++ - MFCC中如何取前13个系数

c++ - 使用 libgit2 从另一个分支创建新的 git 存储库?

c++ - 删除动态数组时会发生什么?

c - 为什么将文本分配给指针会将内存位置存储到文本?

c++ - 有什么方法可以使用 OpenCV 进行基于特征的本地化吗?

c++ - 重载指向重载函数的指针