我要做的是打印出动态分配的元素。
这是我的问题,我是学习新手,而不理解为什么以下这个不起作用?如果你可以请简要说明为什么会产生错误,我只是想从错误中吸取教训。我知道我可以在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];
}
}
答案 0 :(得分:2)
您的uinput
函数会分配内存,但不会使用您发送的input
参数。因此,尝试迭代该指针所指向的项目(尚未初始化为指向任何内容)是未定义的行为,导致程序崩溃,在这种情况下。