【发布时间】:2015-02-24 03:57:56
【问题描述】:
给定以下结构声明:
struct Student
{
char * name;
float gpa;
}
实现以下功能:
Student ** createStudentList(char ** names, int size);
上面的函数动态地创建了一个指向 Student 对象的指针数组。它分配Student对象并将其名称设置为传入的“names”,gpa设置为0。“size”是可用“names”的数量。函数返回指向Student指针数组的指针。
bool destroyStudentList(Student ** studentList, int size);
上面的函数删除了数组中的所有Student对象及其动态分配的数据成员,比如name。它还释放指向 Student 对象的指针数组。如果操作成功,该函数返回true,如果“studentList”包含nullptr,则该函数返回false。
这是我的功能:
Student ** createStudentList(char ** names, int size){
Student **studentList;
studentList = new Student*[size];
for (int i = 0; i < size; i++) {
studentList[i] = new Student;
studentList[i]->name = new char[strlen(names[i]+1)];
studentList[i]->name = names[i];
studentList[i]->gpa = 0;
}
return studentList;
}
bool destroyStudentList(Student ** studentList, int size) {
if (studentList = NULL)
return false;
else {
for (int i = 0; i < size; i++) {
delete [] studentList[i]->name;
studentList[i]->name = nullptr;
delete studentList[i];
studentList[i] = nullptr;
}
delete[] studentList;
return true;
}
}
看起来函数 createStudentList 工作正常,但在尝试为 delete [] studentList[i]->name; "访问冲突读取位置 0x00000000" 释放内存时出现错误。为什么它给我这个错误,我该如何解决?谢谢
【问题讨论】:
标签: c++ pointers dynamic-memory-allocation