我为我的任务写了一个程序,涉及数组的指针和动态分配,我收到运行时错误,程序崩溃,没有编译错误。这是程序:
array.h:
#include <iostream>
using namespace std;
void readArray(float*, int &);
void PrintArray(float*, int);
array.cpp:
#include "array.h"
void readArray(float* array, int &size)
{
array = new float[size];
cout << endl;
cout << "Enter the array elements, use spaces: ";
for (int i = 0; i < size; i++)
{
cin >> array[i];
}
cout << endl;
}
void PrintArray(float * array, int size)
{
for (int i = 0; i < size; i++)
{
cout << array[i] << " ";
}
cout << endl;
}
main.cpp:
#include "array.h"
int main()
{
int size = 0;
cout << "How many elements would you like to enter? ";
cin >> size;
cout << endl;
float *array = NULL;
readArray(array,size);
cout << "The array size is " << size << endl;
PrintArray(array, size);
return 0;
}
示例输出:
How many elements would you like to enter? 3
Enter the array elements, use spaces: 4.0 5.0 6.0
The array size is 3
在此崩溃
有人能让我知道PrintArray功能的问题是什么吗?
答案 0 :(得分:2)
问:有人能告诉我PrintArray功能的问题是什么吗?
答:您的PrintArray功能很好。
问题是你永远不会传递你在readArray之外分配的数组。
更好:
float *
readArray(int size)
{
float* array = new float[size];
cout << endl;
cout << "Enter the array elements, use spaces: ";
for (int i = 0; i < size; i++)
{
cin >> array[i];
}
cout << endl;
return array;
}
int main()
...
float *array = readArray(size);
...
注意:
如果您在array.h中声明了readArray()的原型,那么您需要更新它。
有很多方法可以实现这一点,但基本问题是如果在函数内部分配数组,则需要**
(指向指针的指针)而不是*
。我相信将数组指针作为函数返回传回可以说是最干净的解决方案。
... IMHO
答案 1 :(得分:2)
array
的参数readArray()
按值传递,因此array
中main()
仍为NULL
,即使您在readArray()
中更改了size
。使其通过引用传递。此外,void readArray(float* array, int &size)
不需要通过引用传递。
更改
void readArray(float*& array, int size)
到
{{1}}