C - 尝试打印数组的第一个值时出现分段错误



这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int * get_arr(int max_val) {
int arr[max_val];
arr[0] = 1;
printf("%dn", arr[0]);
return arr;
}
// a function that appears to have nothing to do with i and pt
int some_other_function() {
int junk = 999;
return junk;
}
int main () {
int *pt = get_arr(10); 
printf("access before: %dn", *pt);
// try this program with and without this function call 
some_other_function();

printf("but if I try to access i now via *pt I get %dn", *pt);
printf("heren");
return 0;
}

当我编译并运行此代码时,我在打印1后出现segmentation fault(因此基本上,运行此printf("access before: %dn", *pt);时存在分段错误(。当我删除该行时

printf("access before: %dn", *pt);

我在这里仍然遇到分割错误printf("but if I try to access i now via *pt I get %dn", *pt);.知道为什么我会遇到分段错误吗?

您需要将 arr 的值放在堆上,而不是堆栈上。调用some_other_function()时,arr 的值将被覆盖,因为另一个函数已结束,并且不再保证分配的内存存在。

试试这个:

int * get_arr(int max_val) {
int *arr = malloc(sizeof(int) * max_val);
arr[0] = 1;
printf("%dn", arr[0]);
return arr;
}

只需记住在使用完数组后调用free(pt);即可。

相关内容

  • 没有找到相关文章

最新更新