2015-09-27 95 views
-2
double **mat; 
int i,j; 
mat=new double *[a]; 
for(i=0;i<a;i++) 
{ 
    mat[i]=new double [b]; 
} 
return(mat); 

我寫了這段代碼來分配內存。我面臨錯誤的內存分配錯誤。這個特殊的函數在我的代碼中被調用超過10000次。我想在分配內存時使用auto_ptr。請幫我解決這個問題。自動_ptr實現

回答

2

Auto_ptr不做數組。

std::unique_ptr與定製刪除與典型new[]/delete[]用例,但有一個更簡單的方法:

std::vector<std::vector<double>> mat(a,std::vector<double>(b)) 

稍微複雜一些,但spatial locality快得多,由於是使用一維向量。

std::vector<double> mat(a*b) 

和手工做

mat[row*b+column] 
+2

的尺寸你並不需要一個定製刪除只是使用'的std :: unique_ptr'使用數組。如果數組未用'new []'分配,則只需要定製刪除器。 –

+0

似乎我誤解了我曾經讀過的東西(或者讀了一些錯誤的東西)。應該更好地看看我發佈的鏈接。感謝您清理@RemyLebeau。 – user4581301

+0

上面的答案似乎工作,但返回命令正在出錯 –