-2

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

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 中的两项填充 Student 结构的字段。

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

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

4

2 回答 2

0

我猜Student在调用函数之前没有分配实例。您必须分配一个新的Studentvia实例new Student并将其存储到infoat 中index

info[index] = new Student;
于 2013-10-16T14:31:41.003 回答
0

SO 并不是真正旨在帮助您完成作业。

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

于 2013-10-16T14:29:51.910 回答