c++ - 无效打印功能出错

标签 c++ dynamic allocation

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

这是我的问题,我是新手,不明白为什么下面的这个不起作用?如果您能简要说明为什么会产生错误,我只是想从我的错误中吸取教训。我知道我可以在主函数中动态分配用户输入,但我想通过反复试验看看我是否可以创建一个输入函数,我在打印函数中调用它以在它动态生成用户元素之后分配。

任何关于我可以做些什么来完成这项工作的建议都很棒,谢谢。

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

最佳答案

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

关于c++ - 无效打印功能出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43097871/

相关文章:

c++ - std::async 似乎没有使用 std::launch::async 生成线程

c++ - Valgrind 错误读取大小为 4 无效

pointers - 为什么后续的 Rust 变量会递增堆栈指针而不是递减它?

java - 将 Extended TreeMap 与 Hazelcast TreeMap 结合使用,充当 Hazelcast 分布式 Map。

c# - 创建可变大小的数组

c - 错误 : "pointer being freed was not allocated" in c

c++ - 使用库中的抽象类时如何解决 "deep copy of an abstract class"问题?

c++ - 为什么我的 strftime() 方法没有输出我期望的年份

c++ - 关于指针的说明

c# - 当我知道成员名称时访问动态对象成员的最佳方法?