局部变量问题
1 |
|
func2 是禁止返回局部变量的地址!局部变量 p 的生命周期仅限于 func2 函数执行时,一旦函数返回,这个局部变量将会被销毁,因此返回它的地址会导致未定义行为。
修改办法有两种。
方法 1:使用全局变量
如果你希望 func2 返回一个 Point 结构体的指针,可以将这个结构体定义为全局变量,如下所示:
1 | struct Point global_point; // 全局变量 |
方法 2:动态分配内存
你可以使用 malloc 动态分配内存:
1 |
|
使用动态分配的内存后,你需要记得在不需要这个结构体时使用 free(p) 来释放内存,防止内存泄漏。
如果选择使用全局变量,请确保在多线程或复杂逻辑情况下,代码的线程安全性。而如果使用动态内存分配,确保适当管理内存的生命周期,以防止内存泄漏。在实际应用中,根据需求选择合适的方法。
临时变量也不能取地址
1 | struct Point* func2(void) |
这种方法也会报错,函数的返回值依然是一个临时变量。
需要用下面这种方法:
1 | struct Point global_ppinter; // 全局变量 |
global_ppinter = createPoint(60, 80); 这一行代码是进行赋值操作。