作者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