数组和指针 - 运行时错误

Array and Pointers - runtime error

本文关键字:运行时错误 指针 数组      更新时间:2023-10-16

>我为我的作业编写了一个程序,涉及数组的指针和动态分配,我收到运行时错误并且程序崩溃,没有编译错误。这是程序:

array.h :

#include <iostream>
using namespace std;
void readArray(float*, int &);
void PrintArray(float*, int);

数组.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;
}

主要.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

在这里崩溃

有人可以让我知道打印阵列功能的问题是什么吗?

readArray() 的参数 array 按值传递,因此即使您在 readArray() 中更改了 arraymain() 中的仍然NULL。使其通过引用传递。此外,size不需要通过引用传递。

改变

void readArray(float* array, int &size)

void readArray(float*& array, int size)

问:有人可以让我知道 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() 的原型,则需要更新它。

  • 有很多
  • 方法可以实现此目的,但基本问题是,如果您在函数内分配数组,则需要**(指向指针的指针)而不是*。 我相信将数组指针作为函数返回传递回可以说是最干净的解决方案。

恕我直言...