返回指向C中结构的指针

Pra*_*eep 0 c struct pointers structure char

该程序返回一个指向结构的指针.
当我打印内容时,名称未正确显示,其他两个变量正在正确打印.
可能是什么问题呢?这是C中的代码

#include<stdio.h>
struct student
    {
        char name[20];
        int marks;
        int rank;
    };
struct student stu;
struct student *create();

void main()
{
    struct student *ptr;
    ptr = create();
    printf("%s\t %d\t %d\t",ptr->name,ptr->marks,ptr->rank);
}

struct student *create()
{
    struct student stu = {"john",98,9};
    struct student *ptrr;
    ptrr = &stu;
    return ptrr;
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 6

这里的问题是你正在返回一个指向局部变量的指针.一旦返回定义函数,局部变量就会超出范围.这意味着您返回的指针将在函数返回后指向未分配的内存.使用该指针将导致未定义的行为.

有三种方法可以解决这个问题:

  1. 使用全局变量,并返回指向该变量的指针.全局变量的生命周期是程序的生命周期.
  2. 使用static局部变量.它的生命周期也与程序相同.
  3. 在需要时动态分配结构,并返回该指针.

第1点和第2点有一个问题,那就是你只能有一个对象.如果修改该对象,则指向该单个对象的所有位置都将看到这些更改.

第3点是我建议你去的方式.问题在于,一旦完成对象,就必须释放分配的内存.