【发布时间】:2021-09-02 22:58:37
【问题描述】:
这是我的代码
#include<stdio.h>
#include<stdlib.h>
char ** func()
{
char list[2][20] = {"a140","3.14"};
char * l[2] = {list[0], list[1]};
char ** point = l;
return point;
}
int main()
{
char ** pointers;
pointers = func();
printf("%d", *pointers[0]);
}
在这里,我试图调用一个函数,该函数返回一个指针数组,该指针数组指向包含字符的数组的值。
但是出了点问题,当我运行这段代码时,它会输出:
97
【问题讨论】:
-
这是因为您正在返回一个指向局部变量的指针。局部变量在函数退出时失效,之后使用就是UB。
-
一种方法是动态分配需要超过函数寿命的内存。但是你需要记住在完成后释放它。
-
你期待什么而不是
97? -
您实际上得到了“正确”的结果,因为 97 是
a的 ASCII 码,即l[0][0]。但是你不能依赖这种情况,因为你有未定义的行为。 -
因为
*pointers是char *而**pointers是一个字符。
标签: c pointers undefined-behavior