rat*_*zip 5 c arrays static pointers return
我想知道 C 函数的返回指针是好还是坏设计?如果这是一个不好的做法,那么在下面的例子中什么是好的做法:
问题是继续部分: c函数返回静态变量
在data.h文件中:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int age;
int number;
} person;
person * getPersonInfo();
Run Code Online (Sandbox Code Playgroud)
在 data.c
#include "data.h"
static struct person* person_p = NULL;
person * getPersonInfo()
{
person_p = (struct person*)malloc(10 * sizeof(struct person));
return person_p;
}
Run Code Online (Sandbox Code Playgroud)
在 main.c
#include "data.h"
int main()
{
person* pointer = getPersonInfo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
基本上,文件中的main函数main需要获取静态指针指向的数组所有元素的值person_p,如果这不是一个好的做法,那么好的做法应该是什么?
它不好的唯一原因是因为它背后没有任何内存管理结构。在您当前的代码中,您有内存泄漏,因为您person通过 malloc()分配了一个结构但没有释放它。
考虑编写一个包装函数来为您处理内存管理,如下所示:
void freePerson(struct person * personToDelete)
{
free(personToDelete);
}
Run Code Online (Sandbox Code Playgroud)
然后在你的主要:
int main()
{
person* pointer = getPersonInfo();
freePerson(pointer); // After you are done using it
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我还必须警告不要将malloc(). 根据我的经验,它可能会导致未定义的行为。