#include<stdio.h> #include<string.h> typedef struct student { char* name; int age; void(*work)(void); struct student* classmate; }STUDENT,*pstudent; void work1(STUDENT* ptr) { printf("%s\n", ptr->name); printf("%d\n", ptr->age); } void work2(STUDENT* ptr) { printf("%s\n", ptr->name); printf("%d\n", ptr->age); } int main(void) { STUDENT arr[2] = { {"张三",21,work1,NULL},{"李四",22,work2,NULL} }; for (int i = 0; i < 2; i++) { arr[i].work(); } while (1); }这段代码有什么问题
时间: 2024-01-10 11:03:25 浏览: 70
#include<stdio.h>
这段代码中存在以下问题:
1. 在结构体中,char* 类型的成员变量 name 没有被初始化,可能会导致访问非法内存。
2. 在结构体中,void(*work)(void) 是一个函数指针,但是在结构体数组中没有为其指定具体的函数,导致在循环中调用 arr[i].work() 时会出现未定义的行为。
3. 在 work1 和 work2 函数中,形参应该是 pstudent 类型,而不是 STUDENT* 类型。
4. 在循环中,虽然通过 arr[i].work() 调用了 work1 和 work2 函数,但是由于 work 成员变量没有被初始化,导致调用的函数是未定义的,可能会出现奇怪的行为。
5. 在 main 函数中,没有释放动态分配的内存,可能会导致内存泄漏问题。
6. 在 main 函数中,while(1) 语句会导致程序一直运行,无法退出。
阅读全文