[英]c++ changing a pointers value that's passed as a function parameter
我在一個庫中工作,我需要向該函數的對象發送指針。問題是我需要更改該指針在函數本身中指向的內容,我真的不知道該如何克服這個問題。問題,因為指針是按值傳遞的。
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;
}
我的問題是我需要遍歷所有節點,但是這種方式會將前一個一直發送到指向NULL
myFunction
。.我試圖使用Node** previous
並分配“ new”上一個,例如*previous = current;
但我仍然遇到段錯誤。
我正在使用的庫是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;
}
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*
,但這只是語義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.