(C) 指针在函数中声明,函数完成后指针是否丢失?

(C) 指针在函数中声明,函数完成后指针是否丢失?,c,function,scope,C,Function,Scope,首先,让我首先说,我知道这个问题在某个时候已经得到了回答。这是必须的,但我只是不知道的关键字,以找到一个答案 我正在编写一个程序,在我的程序中,我必须在所有地方创建多个动态大小的数组,然后将它们存储到一个大结构中。因此,如果我必须创建同一类型的动态分配数组,我会在struct字段的函数中创建它(意思是declare、malloc和return)。然而,现在我走在这条路上,我认为我犯了一个重大的错误。我相信我所做的会被函数的作用域破坏,这意味着一旦函数完成,原始指针就会被终止,因此我的结构就是指向

首先,让我首先说,我知道这个问题在某个时候已经得到了回答。这是必须的,但我只是不知道的关键字,以找到一个答案

我正在编写一个程序,在我的程序中,我必须在所有地方创建多个动态大小的数组,然后将它们存储到一个大结构中。因此,如果我必须创建同一类型的动态分配数组,我会在struct字段的函数中创建它(意思是declare、malloc和return)。然而,现在我走在这条路上,我认为我犯了一个重大的错误。我相信我所做的会被函数的作用域破坏,这意味着一旦函数完成,原始指针就会被终止,因此我的结构就是指向不再是“我的”地址的指针。下面是对该函数的一个示例调用,希望它在没有注释的情况下有意义

//Call from main()
current_event->mens_names = create_names_matrix(number_of_couples, 20);

//my "create_names_matrix" function:
char ** create_names_matrix(int num_of_names, int length_of_names){
int i;
char **return_matrix;

return_matrix = malloc(num_of_names * sizeof(char*));
if(return_matrix == NULL){
    panic("return_matrix"); //Panic is a function that checks if malloc failed
}

for(i = 0; i < num_of_names; i++){
    return_matrix[i] = malloc(length_of_names * sizeof(char));
}

if(return_matrix[i-1] == NULL){
    panic("return_matrix"); //Panic is a function that checks if malloc failed
}
return return_matrix;
//从main()调用
当前事件->男士姓名=创建姓名矩阵(情侣数量,20);
//我的“创建\u名称\u矩阵”功能:
字符**创建名称矩阵(名称的整数、长度){
int i;
字符**返回矩阵;
return_matrix=malloc(名称的数量*sizeof(字符*);
if(返回_矩阵==NULL){
panic(“return_matrix”);//panic是一个检查malloc是否失败的函数
}
对于(i=0;i
}

解决方案是在main中声明并动态创建每个字段数组,然后将其作为参数传递到我的每个“create_xxx_matrix”函数中,以避免在函数的作用域完成后终止它们吗

我知道这是一个noob问题,但我已经有一段时间没有和pointers&c合作了


谢谢

动态分配的指针在堆中分配,不被函数的作用域终止。根据作用域,堆栈中分配的变量在离开函数后将被销毁

这很好用。你真正担心的不是指针本身,而是它指向的内存。指针实际上只是一个表示内存位置的数字(如0x0043AF)。由于您使用了
malloc()
您的内存在堆上,在您专门调用
free(ptr)
之前,它不会释放所有指向的内存。

。。。。我声明了它们,所以它们在堆上,当然它们是可以的,因为当函数完成时,堆变量不会被杀死。因此,我上面的代码应该可以工作?你解决问题了吗?