将向量作为空指针传递给函数
Passing a vector to a function as void pointer
我有一个回调函数,它将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());
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 关于 c++ 函数中指针赋值的简单问题
- 在函数内初始化无符号字符指针将返回空指针
- 空指针传递给lambda函数不再为空
- 我多么应该将空指针传递给c ++函数,就像C#中的IntPter.Zero一样
- VC++ HeapAlloc 内部函数提供空指针
- 在函数中分配后的空指针
- 函数参数中的空指针与对象
- 传递给函数的 C++ 空指针
- 传递给函数调用后的空指针sqlite3句柄
- 如何在函数C++中返回空指针
- 为什么Boost.Cconcept通过空指针调用析构函数
- 如何使函数不使用STL容器参数(类似于空指针)
- 当超出函数时,指针设置为空指针
- 为什么在空指针上调用解构函数?
- 将对象的空指针传递给函数
- 什么更快:检查空指针或调用空函数
- 将向量作为空指针传递给函数
- 函数参数中的空指针
- 如何最好地处理对象初始化C++:空构造函数或指针