C++ 无效打印函数中存在错误

C++ 无效打印函数中存在错误,c++,dynamic,allocation,C++,Dynamic,Allocation,我试图做的是打印出动态分配的元素 这是我的问题,我是一个新的学习者,不明白为什么下面的方法不起作用?如果你能简单描述一下为什么会产生错误,我只是想从错误中吸取教训。我知道我可以在main函数中动态分配用户输入,但我想通过反复试验看看是否可以创建一个输入函数,在print函数中调用它,在动态分配后生成用户元素 任何关于我能做些什么来完成这项工作的建议都将非常棒,谢谢 void print(int* input, int size) { uinput(input,size); for

我试图做的是打印出动态分配的元素

这是我的问题,我是一个新的学习者,不明白为什么下面的方法不起作用?如果你能简单描述一下为什么会产生错误,我只是想从错误中吸取教训。我知道我可以在main函数中动态分配用户输入,但我想通过反复试验看看是否可以创建一个输入函数,在print函数中调用它,在动态分配后生成用户元素

任何关于我能做些什么来完成这项工作的建议都将非常棒,谢谢

void print(int* input, int size)
{
    uinput(input,size);
    for(int i=0; i<size;i++)
    {
        std::cout << " " << input[i];// Error -> Thread 1:EXC_BAD_ACCESS (code=1,address=0x0)
    }
}
void打印(int*输入,int大小)
{
uinput(输入、大小);

对于(int i=0;i您的
uinput
函数分配内存,但不使用您发送它的
input
参数。因此,尝试迭代该指针指向的项目(该指针尚未初始化为指向任何东西)是未定义的行为,在这种情况下会导致程序崩溃。

您的
uinput
函数分配内存,但不使用发送它的
input
参数。因此,尝试迭代该指针所指向的项目(该指针尚未初始化为指向任何东西)是未定义的行为,在这种情况下会导致程序崩溃。

input是指针的副本。最好使用
std::vector
作为动态数组。我不确定std::vector是如何工作的,我还没有学习vectors。我希望在我找到解决方法后,我会尝试将其用于vectors。这就是重点:你不应该使用
new
/
new[]
。始终使用智能指针和
std::vector
。这里非常简单:
std::vector input(size);
然后通过引用传递它。好的,我会这样做,谢谢。
input
在uinput()中是指针的副本。最好对动态数组使用
std::vector
。我不确定std::vector是如何工作的,我还没有学习向量。我希望在我找到解决方法后,我会尝试将其用于向量。这就是重点:你不应该使用
new
/
new[]
。始终使用智能指针和
std::vector
。这里非常简单:
std::vector输入(大小);
然后通过引用传递它。好的,我会这样做,谢谢。即使它使用了输入参数,它也不会工作,因为
int*
是通过值传递的。@Elkvis,我以为我的输入参数指向了size的int?这样我就可以传递用户试图动态分配的数组的大小。到输入数组的元素。我知道我错了,但这是我编写该数组时的思考过程。在
uinput()
中,您分配了存储,但该存储在函数返回时就会丢失。在读取值后,您永远不会对其做任何操作。一个选项可能是使用
uinput()
返回指针,在这种情况下,
print()
不需要接受一个作为参数。即使它使用了输入参数,它也不会工作,因为
int*
是按值传递的。@Elkvis,我以为我的输入参数指向大小的int?这样我就可以传递用户试图动态分配的数组的大小。要输入r数组。我知道我错了,但这是我编写数组时的思考过程。在
uinput()
中,您分配了存储空间,但该存储空间会在函数返回时立即丢失。在读取值后,您永远不会对它做任何操作。一个选项可能是让
uinput()
返回指针,在这种情况下,
print()
不需要接受一个参数。
#include <iostream>
void print(int*, int);
void uinput(int*, int);
int* copy(const int*, int);
int main()
{
    int size;
    int* input;
    std::cout << "Enter the size of the array";
    std::cin >> size;


    std::cout << "Original array:" << std::endl;


    print(input,size);
    int* expander = copy(input,size);

    std::cout << "New array:" << std::endl;

    print(expander,size);

    delete [] input;
    delete [] expander;
    input= nullptr;
    expander = nullptr;
    return 0;
}
void uinput(int* input, int size)
{
    int* uInput = new int[size];
    for(int k=0; k <size;k++)
    {
        std::cin >> uInput[k];
    }
}
int* copy(const int* input, int size)
{
    int* newArray = new int[size*2];
    int j =0;
    for(int i = 0; i <size*2;i++)
    {
        if(j >i)
        {
            newArray[j]=newArray[i];
            j++;
        }
        else
            newArray[j]=0;
    }

    return newArray;
}
void uinput(int size)
{
    int* uInput = new int[size];
    for(int k=0; k <size;k++)
    {
        std::cin >> uInput[k];
    }
}