矢量int指针和初始化

时间:2014-04-15 21:44:16

标签: c++ stdvector void-pointers

我有这个功能:

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;

我坚持如何修复。 我对此非常陌生,而且我一直在搜索书籍和网站...我只是要求在正确的轨道上领先。提前谢谢!

2 个答案:

答案 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;
}

请记住,这种方法非常危险,可能会导致内存泄漏。