将向量作为空指针传递给函数

Passing a vector to a function as void pointer

本文关键字:函数 空指针 向量      更新时间:2023-10-16

我有一个回调函数,它将void *作为参数来传递参数,我想将向量传递给该函数。该函数将被多次调用,因此在回调过程完成后,我希望能够通过回调迭代push_back()'的所有元素。

static void cb(void *data)
{
    vector<int> *p = static_cast<vector<int>*>(data); //Attempting to convert *void to vector<int>
    p->push_back(1);
}
int main()
{
    vector<int> a(10); //Max of 10 push_back()s? vector<int> a; gives memory error.
    cb((void*)&a.at(0));
    cout << a.at(0); //Gives a random number of 6 digits or higher
}

问题是,当回调后调用a.at(0)时,它的值不是"1",只是一些随机数。

假设您无法更改cb()的签名,请尝试以下操作:

cb(static_cast<void*>(&a));

此处:

cb ((void*)&a.at(0));

您将指针传递到向量的第一个元素,而不是向量本身,而是在这里:

vector <int> *p = static_cast <vector <int> *> (data);

您将传递的数据强制转换为指向向量的指针,这可能是未定义的行为。若您想将指针传递到整个向量,可以这样传递:

cb ((void *)&a);

如果你真的想把一个指针传给向量的一个元素,那么你应该像这样进行投射:

int * = static_cast <int *> (data);

在C++11中,您有vector::data:

cb(a.data());