gpt4 book ai didi

c++ - vector ,倾斜数据,将其作为指针传递给函数时

转载 作者:行者123 更新时间:2023-11-28 06:14:32 26 4
gpt4 key购买 nike

我有一个采用整数指针的接口(interface)(我无法更改此接口(interface))。我想在其他一些类中填充一个 vector,并希望通过我的 class 从客户端代码调用该接口(interface)。但是当我从 vector 中检索值时,它总是从 0 开始。我不想将 vector 声明为 static 并且我可以' t 按值或按引用传递 vector。我只能传递整数指针。

我已经编写了用于模拟这种情况的代码。

#include <iostream>
#include <vector>

//--Class SpMx; I can't change anything here--//
class SpMx{
public:
void getVector(int* values_);
void showValues();
private:
int* values;
};

//--definition--//
void SpMx::getVector(int* values_) {
values = values_;
}


void SpMx::showValues(){

for(size_t i = 0; i< 13; ++i)

std::cout<<values[i]<<std::endl;
}

//--class Mx; I can make change here--//
class Mx{

public:
Mx() = default;
SpMx* myFunc();
};

//--definition--//
SpMx* Mx::myFunc(){

//hard coded for testing
int ary[] = {2, 110, 20, 30, 40, 50, 60, 70, 80, 90, 100, 120, 140, 160};
std::vector<int> myVector(ary, ary +sizeof(ary)/sizeof(int));
SpMx* sMx_obj = new SpMx();
sMx_obj->getVector(&myVector[0]);
return sMx_obj;
}

//--main--//
int main(){
Mx mx_obj;
SpMx* spmx_obj;
spmx_obj = mx_obj.myFunc();
spmx_obj->showValues();
delete spmx_obj;
return 0;
}

//output
0, 110, 20, 30, 40, 50, 60, 70, 80, 90, 100, 120, 140, 160

最佳答案

这个函数会给你带来麻烦

SpMx* Mx::myFunc(){    
int ary[] = {2, 110, 20, 30, 40, 50, 60, 70, 80, 90, 100, 120, 140, 160};
std::vector<int> myVector(ary, ary +sizeof(ary)/sizeof(int));
SpMx* sMx_obj = new SpMx();
sMx_obj->getVector(&myVector[0]);
return sMx_obj;
}

载体myVector在此函数的范围内声明。然后你就有了你的sMx_objvalues指向此 vector 内存的指针。一旦 vector 超出范围,该内存现在就是垃圾。但是你返回 SpMx对象,指针仍指向该垃圾。

您需要确保您的 SpMx对象拥有该内存,或者至少它指向的数组只要你的 SpMx 就存在。对象确实如此。

关于c++ - vector ,倾斜数据,将其作为指针传递给函数时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594671/

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