void print函数出错

时间:2017-03-29 15:29:03

标签: c++ dynamic allocation

我要做的是打印出动态分配的元素。

这是我的问题,我是学习新手,而不理解为什么以下这个不起作用?如果你可以请简要说明为什么会产生错误,我只是想从错误中吸取教训。我知道我可以在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)
    }
}

没有上述打印功能的整个代码

#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;
}

更新:我试图修改我只是让它指向uInput函数的大小,但这不起作用。

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

1 个答案:

答案 0 :(得分:2)

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