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

时间:2013-02-03 04:05:09

标签: c function scope

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

我正在编写一个程序,在我的程序中,我必须在整个地方创建多个动态大小的数组,然后将它们存储到一个大结构中。因此,如果我必须创建相同类型的动态分配数组,我在一个函数中创建它(意味着声明它,malloc它,并将其返回)到我的struct字段。然而,既然我已经走在路上,我认为我犯了一个重大缺陷。我相信我所做的就是被函数的范围所破坏,这意味着一旦函数完成,原始指针就会被杀死,因此我的struct指向一个不再是“我的”的地址。下面是对该函数的示例调用,希望它没有注释是有意义的。

//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中声明并动态创建每个字段数组,然后将其作为参数传递到我的每个“create_xxx_matrix”函数中,以避免在函数范围完成后将其杀死?

我知道这是一个noob问题,但是自从我使用指针和放大器以来已经有一段时间了。 C。

谢谢!

2 个答案:

答案 0 :(得分:2)

动态分配的指针在堆中分配,而不是被函数的范围所杀死。按范围,堆栈中分配的变量一旦离开函数就会被销毁。

答案 1 :(得分:0)

这样可以正常工作。你真正担心的不是指针本身,而是它所指向的记忆。指针实际上只是一个表示内存位置的数字(如0x0043AF)。由于您使用了malloc(),因此在您专门调用free(ptr)并释放所有指向的内存之前,您的内存将永远不会被释放。