作者ric2k1 (Ric)
看板EE_DSnP
标题[情报] 有人问关於 Matrix 与 Vector 的 constructors 的问题
时间Mon Oct 18 00:51:56 2010
我想他的问题应该也是很多人的问题,所以在这 repost 一下:
>>>
我在class Matrix 的constructor
使用了_data=new Vector[numRows];
但是发现必须先写出operator new[] 的overloaded的version
google了一下发现工程浩大,应该不是教授的本意
所以又用了
Vector a[numRows];
_data=a;
编译过了,可是执行时会出现错误
请问还有什麽方法吗?
<<<
不用去 overload operator new[],
但是要在 constructor 里头对每个 Vector _data[i] 去 allocate 适当的记忆体,
你可以在 Matrix or Vector 里头加一些 member functions.
>>>
也就是说还是要使用operator new[]?(要产生_data[i])
我有allocata记忆体给每个_data[i]
_data=new Vector[numRows];
for(unsigned i=0;i<numRows;i++)
_data[i]=Vector(numColumns);
编译也可以过,程式直到输入完m1都没问题,但是输入m2
的row和col後就会出现 记忆体区段错误
用gdb去找发现是在_data=new Vector[numRows]; 这行crash的。
<<<
: 我有allocata记忆体给每个_data[i]
: _data=new Vector[numRows];
这行的意思是 allocate "numRows" 个 Vector 这种型态的 objects,
他会去呼叫 Vector 的 constructor,但是你可以想一想传进去的参数是甚麽?
有真的 allocate 到 Vector::_data[] 的记忆体吗?
: for(unsigned i=0;i<numRows;i++)
: _data[i]=Vector(numColumns);
这个应该会去呼叫 Vector::operator =(const Vector&),
你有 overload 吗? 如果没有的话,compiler 会做 member-wise 的 copy,
那麽你 copy 到的只是等号右边 "Vector(numColumns)"
产生的 temp obj 的 _data pointer,出这个 function 可能就被 delete 掉了...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.11.13