C++ 返回C+中向量元素的复制值+;

C++ 返回C+中向量元素的复制值+;,c++,vector,C++,Vector,我已经搜索了SO和Google 3个小时,但找不到我看到的内容的解决方案 我有一个.CPP向量支持程序,它为一个更大的C程序提供C++功能。我已经有一个queue.cpp工作正常,队列推送并弹出来回传递的值/元素的副本,因此函数和构建的导出工作正常 尝试复制并返回向量中元素的值时出现问题 c文件中的用法 vector_type *temp; ... _Vector_At(VectorHandle, i, temp); if(temp

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

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

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

c文件中的用法

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

typedef结构
{
std::向量q;
pthread_mutex_t mutex;
}载体;
...
int_Vector_At(向量句柄、短索引、向量类型*ptr)
{
向量*q=(向量*)句柄;
if(NULL==q)
{
返回(-1);
}
ptr=q->q[索引];
printf(“测试%x\n”,ptr);
返回(0);
}
控制台输出为

Test <expected memory address>
null
Returned 0
测试
无效的
返回0
我只能在访问器函数中查询ptr指向的值。当ptr的值从.cpp程序返回到.c程序时,它不知何故被擦除了。但是,std::queue可以以完全相同的方式推送和弹出值,这没有任何意义


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

在c代码中,您正在将
向量类型*temp
传递给函数
\u vector\u At
\u Vector\u At
函数正在将指针的本地副本制作为
ptr
,并使用该副本修改值,但它不会按您的意愿返回该值。这是因为它是一个局部变量,它的生命周期在函数的末尾结束。 要解决此问题,可以将指针作为引用或指针传递:
\u Vector\u At(向量句柄、短索引、向量类型*&ptr)

\u Vector\u At(Vector\u HANDLE HANDLE,short index,vectory\u type**ptr)

标识符以下划线开头,后跟大写字母,这样我就不会使用它们了。我要把我的完全无能归咎于我正在与之战斗的寒冷。谢谢你的回答,很有道理,不知道我是怎么错过的。今天到此为止。@user3096955:如果这个答案对您有效,您可以将其检查为“已接受”。
Test <expected memory address>
null
Returned 0