我有以下代码,它似乎在打印乱码。但是,当我将数组的大小从“r”更改为 5000 时,它工作得很好。任何人都可以解释这种行为并告诉我如何解决它吗?我对此做了很多研究,但找不到答案。
#include <iostream>
#include <cstring>
using namespace std;
int * check (int leng)
{
const int r = leng;
int arr [r];
memset(arr,0,sizeof(arr));
int * x = arr;
return x;
}
main()
{
int * l = check(20);
for (int g=0; g<5; g++) cout << l[g] << ' ';
}
最佳答案
x
是 arr
的地址,arr
是一个堆栈变量,所以你不能将它作为返回值传递。如果您希望 check
返回一个指向数组的指针,您需要使用 new 分配它:arr = new int[r]
。请注意,您最终需要通过 delete[]
释放内存。有关动态内存分配的更多信息,您可以查看 this link。 .
关于c++ - 通过函数传递指针然后变得乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30927829/