指向 char 数组的 C++ 动态 stuct 指针

c++ dynamic stuct pointer to char array

本文关键字:动态 stuct 指针 C++ char 数组 指向      更新时间:2023-10-16

我在将内存动态分配给指向结构的指针内的字符数组时遇到问题。这是一个家庭作业,必须使用以下结构大纲:

struct Student
{
char *namePtr;
unsigned int score;
};

这是我遇到问题的部分

/***************************
 * takes value from temporary value and puts into dynamic allocated Student array
 ***************************/
bool updateStructPtr(Student **info, unsigned int index, char *name, unsigned int score)
{
try
{
    info[index]->namePtr = new char [strlen(name)+1];
    if(DEBUG) cout << "size for dynamic char: " << strlen(name)+1 << endl << endl;
    //copy char array into new array
    strcpy(info[index]->namePtr, name);
    info[index]->score = score;
}
catch (bad_alloc & param)
{
    info[index]->namePtr = NULL;
    return false;
}
return true;
}

我的教授说:看一眼您的代码,您会发现您似乎没有按照我为您提供的算法的步骤 3-2 的第一句话中指定的那样为 Student 结构动态分配内存。

3-2. 为学生结构动态分配内存。将此 Student 结构的地址放在结构指针数组中。您还需要动态分配足够的内存来存储名称。不要存储引号字符。使用步骤 3-1 中的两个项目填充学生结构的字段。

指针数组中的指针指向内存中的随机位置,您正在尝试使用这些随机地址。这当然可以解释程序崩溃的原因。实际上,有很多方法可以使该程序崩溃,必须仔细遵循所有步骤以避免这种情况。

但我不知道如何解决这个问题或从哪里开始。

SO

并不是为了帮助你完成家庭作业。

话虽如此,老师的指示非常详细和正确。您必须在某个时候使用 new Studentnew Student[] 来实际更新传递给您的学生**info,以便添加您应该添加的新学生结构。

我猜在调用函数之前Student没有分配实例。您必须通过 new Student 分配一个新的Student实例,并将其存储在 indexinfo中。

info[index] = new Student;