gpt4 book ai didi

c++ - 在 C++ 中返回 vector 元素的复制值

转载 作者:行者123 更新时间:2023-11-30 04:10:40 24 4
gpt4 key购买 nike

我已经在 SO 和 Google 上搜索了 3 个小时,但找不到我所看到的解决方案。

我有一个 .cpp vector 支持程序,它为更大的 c 程序提供 c++ 功能。我已经有一个工作正常的队列 .cpp,队列推送和弹出它来回传递的值/元素的拷贝,因此函数和构建的导出工作正常。

尝试复制并返回 vector 中元素的值时出现问题。

.c 文件中的用法

        vector_type *temp;
...
_Vector_At(VectorHandle, i, temp);
if(temp == NULL)
printf("null\n");
printf("Returned %x\n", temp);

.cpp:

typedef struct
{
std::vector<vectory_type*> q;
pthread_mutex_t mutex;
} VECTOR;
...
int _Vector_At(VECTOR_HANDLE handle, short index, vectory_type *ptr)
{
VECTOR *q = (VECTOR *)handle;
if (NULL == q)
{
return(-1);
}
ptr = q->q[index];
printf("Test %x\n", ptr);
return(0);
}

控制台输出为

Test <expected memory address>
null
Returned 0

我只能在访问器函数中查询 ptr 指向的值。当 ptr 从 .cpp 程序返回到 .c 程序时,它的值不知何故被删除。但这没有任何意义,即 std::queue 可以以完全相同的方式很好地推送和弹出值。

有人有什么想法吗?谢谢。

最佳答案

在 C 代码中,您将 vector_type *temp 传递给函数 _Vector_At_Vector_At 函数正在将指针的本地拷贝制作为 ptr 并使用它来修改值,但它并没有按照您的意愿返回该值。这是因为它是一个局部变量,它的生命周期在 _Vector_At 函数结束时结束。要解决这个问题,您可以将指针作为引用或指针指针传递:_Vector_At(VECTOR_HANDLE handle, short index, vectory_type* &ptr)或者_Vector_At(VECTOR_HANDLE handle, short index, vectory_type** ptr)

关于c++ - 在 C++ 中返回 vector 元素的复制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20553455/

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