我想做的是打印出动态分配的元素。
这是我的问题,我是新手,不明白为什么下面的这个不起作用?如果您能简要说明为什么会产生错误,我只是想从我的错误中吸取教训。我知道我可以在主函数中动态分配用户输入,但我想通过反复试验看看我是否可以创建一个输入函数,我在打印函数中调用它以在它动态生成用户元素之后分配。
任何关于我可以做些什么来完成这项工作的建议都很棒,谢谢。
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/