0
我有以下問題: 我有幾個部分(本徵)MatrixXds我想連接到另一個更大的MatrixXd變量,我只有一個指針。但是,較小的矩陣和它們的數量都是動態的,所以我不能輕易使用操作符。C++本徵:如何動態連接矩陣(指針問題?)
所以我想下面的(小矩陣存儲在list_subdiagrams,很明顯,和basis->的cols()定義矩陣的數量),採用本徵的MatrixXd塊funtionality:
// sd[] contains the smaller matrices to be concatenated; all are of the same size
// col defines the total number of smaller matrices
MatrixXd* ret = new MatrixXd(sd[0]->rows(), col*sd[0]->cols());
for (int i=0; i<col; ++i){
ret->block(0, i*sd[0]->cols(), sd[0]->rows(), sd[0]->cols()) = *(sd[i]);
}
這不幸的是,似乎以某種方式覆蓋了* ret變量的某些部分 - 在通過塊分配之前,大小(在我的測試用例中)正確顯示爲2×1。分配後它變成了140736006011136x140736006011376 ...
謝謝你的幫忙!
謝謝。您的帖子的第一個版本無效 - 不能將矩陣指針直接初始化爲零。然而,這一個是有效的。我會更新我的帖子以更精確。 – cleros
所以 - 我再次查看了不同片段之間的區別,似乎我最初的問題是,我沒有將矩陣初始化爲特定值......因此,顯然使用「new」分配內存是不夠的。你同意這個評估嗎?再次感謝! – cleros
@cleros是的,這是正確的,使用'new'不會初始化矩陣中的任何東西。實際上,即使'MatrixXd mat(2,2);'也不會將元素初始化爲零。你需要明確地初始化矩陣。 – vsoftco