gpt4 book ai didi

c++ - 读取 char * 始终具有相同的地址

转载 作者:搜寻专家 更新时间:2023-10-31 00:53:34 25 4
gpt4 key购买 nike

我有这样的结构:

struct Node {
void *data;
Node *l, *r;
}

我应该使用函数:

void push(Queue *q, void *data, int priority) {
Node *n = new Node;
n->data = data;

// place node in queue
}

我正在尝试循环读取字符串,但之后我得到了队列,其中节点中的所有值都相似。

void read_input(Queue *q) {
string s;
int p;
cin >> s >> p;

// problem is here
push(q, (void *) s.c_str(), p);
}

void main() {
Queue *q = create();

for (int i = 0; i < 5; i++) {
read_input(q);
}
}

我该如何解决?为什么 string s 总是有相同的地址?

最佳答案

正如 Trantor 所说,你使用的是 s.c_str() ,它是字符串 s 的私有(private)指针;并且仅在 read_input 函数内部有效。

每次调用 read_input 都会使用这个指针,每次到达 read_input 结束(超出范围)时该指针都会被销毁。

你看到相同的指针,可能是因为它在堆栈上。这是一个巧合。

要解决您的问题,您需要创建角色的拷贝并将它们存储在 node->data 中。但是,您还需要考虑将其删除的位置。例如。 OnNodeDestroy 事件或类似事件。

关于c++ - 读取 char * 始终具有相同的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48299481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com