我使用的是一个库,在这里我需要将指向对象的指针发送到函数。问题是,我需要改变这个指针在函数本身中指向什么,而且我不知道如何克服这个问题,因为指针是作为值传递的。
struct.cpp
struct MyStruct {
Node* previous;
...
};main.cpp
int main(...) {
MyStruct* m = new MyStruct;
m->previous = NULL;
...
while (traversing) {
library_function((AFUNPTR) myFunction, (void*) m->previous);
}function.cpp
void myFunction(void* node_from_lib, void* point_to_previous) {
Node* current = (Node*) node_from_lib;
Node* previous = (Node*) point_to_previous;
if (previous != NULL) {
...
}
previous = current;
}我的问题是,我需要遍历所有的节点,但是以这种方式,前面的内容将一直发送到myFunction中,指向NULL。我尝试使用Node** previous并分配“新的”以前的*previous = current;,但是我仍然有一个seg错误。
我使用的库是Intel-PIN,我试图对指令进行测试,并将它们链接到一个图表中,尽管我已经从示例中去掉了所有的PIN,因为我认为这是一个一般的c++问题。
这是我用指针指向指针的尝试..。
struct.cpp
struct MyStruct {
Node** previous;
...
};main.cpp
int main(...) {
MyStruct* m = new MyStruct;
*(m->previous) = NULL;
...
while (traversing) {
library_function((AFUNPTR) myFunction, (void*) m->previous);
}function.cpp
void myFunction(void* node_from_lib, void** point_to_previous) {
Node* current = (Node*) node_from_lib;
Node** previous = (Node**) point_to_previous;
if ((*previous) != NULL) {
(*previous)->memberFunc();
...
}
*previous = current;
}发布于 2014-01-28 19:03:02
C:
int main(...) {
MyStruct* m = new MyStruct;
m->previous = NULL;
...
while (traversing) {
library_function((AFUNPTR) myFunction, &m->previous);
}在这里,通过指针传递m->previous (指针的类型为Node**,它可以被重新解释为void*并返回而不会丢失任何东西)。)该函数需要void*。)
function.cpp
void myFunction(void* node_from_lib, void* point_to_previous) {
Node* current = (Node*) node_from_lib;
Node* previous = * ((Node**)point_to_previous); // cast for reading - assume point_to_previous is pointer to pointer, and retrieve the pointer
if (previous != NULL) {
...
}
previous = current;
*((Node**)point_to_previous) = previous; // assume, point_to_previous is pointer to pointer, and change the pointer
}在这里,您可以将void*转换为Node**。
在这里,将指针传递给节点指针(Node**)作为第二个参数。它被重新解释为void*,但它只是语义上的。
https://stackoverflow.com/questions/21413894
复制相似问题