我有这个功能:
void getInput(vector<void*> &list)
{
int qty, large;
cout<<"How many random numbers do you wish to have? ";
cin>>qty;
cout<<"What is the largest number you wish to see? ";
cin>>large;
list.resize(qty+1);
for(int i = 0; i < qty; i++)
{
int x = (rand()%(large+1));
*((int*)list[i])=x;
}
}
它崩溃了
*((int*)list[i])=x;
我坚持如何修复。 我对此非常陌生,而且我一直在搜索书籍和网站...我只是要求在正确的轨道上领先。提前谢谢!
答案 0 :(得分:2)
你不应该首先使用void*
。您可以使用std::vector<int>
并且完全没有问题:
void getInput(std::vector<int>& list)
{
int qty, large;
cout<<"How many random numbers do you wish to have? ";
cin>>qty;
cout<<"What is the largest number you wish to see? ";
cin>>large;
list.resize(qty);
for(int i = 0; i < qty; i++)
{
list[i] = rand()%(large+1);
}
}
但如果您感兴趣,它导致错误的原因是因为您可能取消引用未初始化的指针(如果向量中的值未在函数外部初始化)。
最后,如果您有权访问C ++ 11,请consider dropping rand
统一生成随机数。
答案 1 :(得分:0)
就像@Retired Ninja所说,你的指针指向什么都没有,当你取消引用它们时会导致运行时错误。您可以使用@ Jefffrey的解决方案,也可以使用动态内存。例如:
for (int i = 0; i < qty; i++)
{
list[i] = new int; //now list[i] actually points to something
int x = (rand() % (large + 1));
*((int*) list[i]) = x;
}
请记住,这种方法非常危险,可能会导致内存泄漏。