作为类成员的二维向量指针 我是C++新手。 我试图创建一个由2d向量指针组成的类。我正在创建一个以2D向量为参数的对象。我试图用指针引用这个2D向量。这个编译很好,但在执行过程中我遇到了一个分段错误。 我在这里附上我的代码。请帮忙 # include <iostream> # include <vector> using namespace std; class Vectorref { vector<vector<float> > *vptr; // pointer to 2D vector public: Vectorref(vector<vector<float> >); double getval(int,int); }; Vectorref::Vectorref(vector<vector<float> > v) { vptr = &v; } double Vectorref::getval(int r, int c) { return (*vptr)[r][c]; } int main(){ vector<vector<float> > A (3,vector<float>(3,2.0)); Vectorref B(A); for(int i=0; i<3 ;i++){ for(int j=0; j<3; j++){ cout << B.getval(i,j) << "\t"; } cout << endl; } return 0; } #包括 #包括 使用名称空间std; 类向量{ vector*vptr;//指向2D向量的指针 公众: Vectorref(向量); 双getval(int,int); }; 向量ref::向量ref(向量v) { vptr=&v; } 双向量ref::getval(intr,intc) { 返回(*vptr)[r][c]; } int main(){ 向量A(3,向量(3,2.0)); 向量B(A); 对于(int i=0;i

作为类成员的二维向量指针 我是C++新手。 我试图创建一个由2d向量指针组成的类。我正在创建一个以2D向量为参数的对象。我试图用指针引用这个2D向量。这个编译很好,但在执行过程中我遇到了一个分段错误。 我在这里附上我的代码。请帮忙 # include <iostream> # include <vector> using namespace std; class Vectorref { vector<vector<float> > *vptr; // pointer to 2D vector public: Vectorref(vector<vector<float> >); double getval(int,int); }; Vectorref::Vectorref(vector<vector<float> > v) { vptr = &v; } double Vectorref::getval(int r, int c) { return (*vptr)[r][c]; } int main(){ vector<vector<float> > A (3,vector<float>(3,2.0)); Vectorref B(A); for(int i=0; i<3 ;i++){ for(int j=0; j<3; j++){ cout << B.getval(i,j) << "\t"; } cout << endl; } return 0; } #包括 #包括 使用名称空间std; 类向量{ vector*vptr;//指向2D向量的指针 公众: Vectorref(向量); 双getval(int,int); }; 向量ref::向量ref(向量v) { vptr=&v; } 双向量ref::getval(intr,intc) { 返回(*vptr)[r][c]; } int main(){ 向量A(3,向量(3,2.0)); 向量B(A); 对于(int i=0;i,c++,class,pointers,vector,C++,Class,Pointers,Vector,您应该传递v作为参考,而不是复制 Vectorref(vector<vector<float> >&); Vectorref::Vectorref(vector<vector<float> >& v) vectoref(vector&); Vectorref::Vectorref(向量与v) 您必须确保您的向量比您的向量寿命长,否则您将再次出现分段错误 您的getval函数应该返回float而不是doublevptr=&v;-v

您应该传递
v
作为参考,而不是复制

Vectorref(vector<vector<float> >&);
Vectorref::Vectorref(vector<vector<float> >& v)
vectoref(vector&);
Vectorref::Vectorref(向量与v)
您必须确保您的向量比您的向量寿命长,否则您将再次出现分段错误


您的
getval
函数应该返回
float
而不是
double

vptr=&v;
-
v
是一个自动变量;是传递参数的副本。您正在保存一个自动变量的地址,该自动变量在构造函数退出作用域时将不再存在。@WhozCraig我该怎么办?i知道它的基本问题,但我想问的是,在这段代码中,只有
p
vector占用内存,对吗?指向和引用不会创建任何会占用内存的副本?从原始示例中可以看出。变量
vector A
将占用最多内存。另一个变量
vectoref B
将只占用require
sizeof(vector*)==sizeof(size\u t)
bytes,在64位机器上为8字节。