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