c - (C) Pointer Declared in function,函数结束后指针丢失了吗?

标签 c function scope

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

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

//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”函数中,以避免它们在函数范围完成后被杀死?

我知道这是一个菜鸟问题,但我已经有一段时间没有使用指针和 c 了。

谢谢!

最佳答案

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

关于c - (C) Pointer Declared in function,函数结束后指针丢失了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14669392/

相关文章:

Ruby 作用域:MyClass.new 和::MyClass.new 之间的区别

c - 静态代码分析工具报告的缓冲区溢出问题

c - 排序链表位置

c++ - 指向 C 字符串的指针?

C - 凯撒密码 - 中止陷阱 :6 Error?

oop - 类数据在内部传递好还是直接访问好?

c - 标签只能作为语句的一部分使用 Error

c - "foreground process group"是控制终端的属性还是 session 的属性?

function - 打开 native 屏幕时调用函数

javascript - Vue 范围 : how to delay handling of @mouseover