c++ - 将 vector 作为空指针传递给函数

标签 c++ pointers vector void

我有一个回调函数,它接受一个 void * 作为传递参数的参数,我想将一个 vector 传递给该函数。该函数将被多次调用,因此在回调过程完成后,我希望能够遍历所有通过回调被 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));

关于c++ - 将 vector 作为空指针传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14825274/

相关文章:

c++ - 为什么 Base 类和 Drive 类在启动 Drive 实例时具有相同的虚拟指针但有 2 个 vtable

c++ - 请问 `alignof(N) == sizeof(N)` 其中 N 是整型吗?

c++ - 在用户模式线程中旋转 volatile 变量是否安全?

C++自定义类型 vector 优化

c++ - 为什么使用自定义对话框会得到 "QMetaObject::connectSlotsByName: No matching signal"?

c - 请解释一下这个比较字符串的方法

C - 尝试更改堆栈上的值在一种情况下有效,但在另一种情况下无效,这是为什么?

c - 何时将数组名或函数名“转换”为指针? (在C中)

c++ - 当我用 g++ 编译器编译 c++ 时,错误是什么意思?

perl - 旋转 3D 结构