代码中的逻辑错误

时间:2013-02-15 08:22:43

标签: error-handling

我应该填写的代码很容易。

#define MAX_NAME_LEN 128
typedef struct {
 char name[MAX_NAME_LEN];
 unsigned long sid;
} Student;
/* return the name of student s */
const char* getName(const Student* s) {
 return s->name;
}
/* set the name of student s */
void setName(Student* s, const char* name) {
 /* fill me in */
}/* return the SID of student s */
unsigned long getStudentID(const Student* s) {
 /* fill me in */
}
/* set the SID of student s */
void setStudentID(Student* s, unsigned long sid) {
 /* fill me in */
}

但它说明以下函数中的逻辑错误是什么?

Student* makeDefault(void) {
 Student s;
 setName(&s, "John");
 setStudentID(&s, 12345678);
 return &s;
}

我没有看到任何问题。我测试了它。它工作正常。

是因为这应该是一个无效函数而且不需要返回任何东西吗?

1 个答案:

答案 0 :(得分:0)

您无法返回指向本地声明的变量(Student s)的指针。返回后变量“s”将消失(变为垃圾)。

相反,您需要先分配学生。

你应该这样做:

void makeDefault(Student* pS) {
 setName( pS, "John");
 setStudentID( pS, 12345678);
}

然后让调用应用程序分配学生。