我可以返回主函数的本地指针吗?
我写了一个函数f()来返回指向main函数的本地指针。 我知道f()函数的内存将在执行后释放。 但是f()函数可以返回指向a [2]数组的指针。 我认为应该发布[2],但它仍然存在。
所以我想知道我可以编写一个函数,它可以返回本地指针,本地指针指向函数中的局部变量吗? 如果它可以返回,为什么在f()函数结束后不会释放[2]的数组?
#include int* f() { int a[2] = {1, 2}; int* p = a; printf("%p\n", p); return p; } int main(void) { int* p = f(); printf("%p\n", p); return 0; }
由于您指向的数组将超出范围并且不再存在,因此尝试取消引用返回的指针将导致未定义的行为 。
但是 ,在实践中,内存仍然存在,如果以后的函数调用都没有覆盖任何内容,它仍然会保持不变。 因此,如果您尝试取消引用指针,您仍将看到数据。 但你不应该这样做!
关于你正在做什么,你实际上并没有取消引用指针,所以你没有 UB。 你所做的只是打印指针本身的值。
是的,你可以(不幸的是)返回指针。 不,这不是一个好主意。 指针将指向标记为不再使用的内存,这意味着如果您尝试取消引用它,则很可能会出现段错误。 也就是说,如果你很幸运,你会得到一个段落错误 – 如果没有,你会得到一个随机值或一些其他未定义的行为。