【发布时间】:2022-09-27 21:05:56
【问题描述】:
我对指针的使用不熟悉,我正在尝试编写一个程序来学习使用它们。我有一个问题要问你。我有一个文件lib.h,在里面我定义了所有必要的函数。在这个文件中,我有一个简单的数据struct:
struct Slave
{
char **all_samples;
int number_of_samples;
char **last_samples;
int *RSSI;
int *AGC;
int *AUTH;
};
如您所见,该结构的成员是指针(指向 int 的指针,指向 ecc 指针的指针)。在同一个文件中,我有几个函数。为了简洁起见,考虑其中之一。在这个函数中,我从一个文件中读取了几行并将它们放入数组字符串all_samples(i 是先前正确计算的行数):
struct Slave *read_slaves_file(char *file_path, char *slave)
{
...
struct Slave *slave_ptr = malloc(sizeof(struct Slave *));
slave_ptr->all_samples = malloc(i * sizeof(char *));
slave_ptr->all_samples = all_samples;
return slave_ptr;
}
我省略了代码中不相关的部分(我的问题更具理论性,我的程序中没有错误)。如您所见,我返回一个指向结构的指针,因此,在 main 内部:
#include \"lib.h\"
int main(){
struct Slave *slave_1 = malloc(sizeof(struct Slave *));
slave_1 = read_slaves_file(FILE_PATH, SLAVE_1);
return 0;
}
一切似乎都很好......但是,我有一个疑问。在前一个函数内部动态分配的所有内存:
struct Slave *slave_ptr = malloc(sizeof(struct Slave *));
slave_ptr->all_samples = malloc(i * sizeof(char *));
应该在哪里解除分配?是否应该解除分配?我想在返回指针之前我不能释放内存。那么,该怎么做呢?
-
\"我的程序没有错误)。如您所见,我返回一个指向结构的指针,因此,在 main:\"
slave_1 = malloc(sizeof(struct Slave *)); slave_1 = /* blatant bug here */ -
添加一个 free_slaves 它将释放从属指针并在您不再需要指针时调用它。
-
当然可以,但我的问题是:我必须释放的唯一内存是在主内存中分配的指针内存吗?只为他们?如您所见,在函数 read_slaves_file 内部,我为结构分配内存,为其字段分配内存。这个内存分配不需要deallocate?
-
您应该以相反的顺序将每个
malloc()与free()匹配。当您释放结构本身时,不会自动释放具有分配的struct成员。 -
是的,事实上我的问题是关于这个的。我怎样才能释放函数内的 malloc 然后我将指针返回到结构?
标签: arrays c pointers memory struct