我遇到以下代码的问题:
#include <iostream>
using namespace std;
double* FillArray(void)
{
double result[5];
for (int i = 0; i<5;i++){
result[i]=(double) i;
}
return result; // return the pointer
}
int main()
{
double * a = FillArray();
for (int i = 0; i<5;i++){
cout << a[i] << endl; // print out the array
}
return 0;
}
输出很奇怪:
0
3.47187e-236
8.89753e-308
8.8976e-308
3.90251e-236
你能告诉我的代码有什么问题吗? 我尝试使用函数返回一个数组,并在main()中打印出来。
答案 0 :(得分:4)
您正在返回一个指向局部变量的指针,即数组result
。这是未定义的行为。函数返回时变量不再存在,所以当你打印时,就会打印垃圾值。
如果您确实想要返回数组,可以使用std::array
:
typedef std::array<double, 5> DArray5;
DArray5 FillArray()
{
DArray5 result;
for (size_t i = 0; i < result.size(); ++i){
result[i] = i;
}
return result;
}
编辑这是仅限C ++的答案。没有C / C ++语言。
答案 1 :(得分:2)
result
在堆栈中分配。尝试在堆中分配它,如下所示:
double* result = new double[5];
答案 2 :(得分:0)
名为result的数组被释放。试试这段代码:
#include <iostream>
using namespace std;
void FillArray(double *result)
{
for (int i = 0; i<5;i++){
result[i]=(double) i;
}
}
int main()
{
double result[5];
FillArray(result);
for (int i = 0; i<5;i++){
cout << result[i] << endl; // print out the array
}
return 0;
}
答案 3 :(得分:-1)
这是错误的:
double* FillArray(void)
{
// Result ONLY has scope INSIDE of the FillArray function
double result[5];
for (int i = 0; i<5;i++){
result[i]=(double) i;
}
// Bad things will happen when the caller tries to use (now-invalid) "result"
return result;
这是一个正确的选择:
#define ARRAY_SIZE 5
main ()
double result[ARRAY_SIZE];
FillArray (result, ARRAY_SIZE);
for (int i = 0; i<ARRAY_SIZE;i++){
cout << result[i] << endl; // print out the array
}
...
void FillArray(double *array, int n)
{
for (int i = 0; i<n;i++){
array[i]=(double) i;