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

J'ai écrit ce code pour allouer de la mémoire. Je suis confronté à une mauvaise erreur d'allocation de mémoire. Cette fonction particulière est appelée plus de 10000 fois dans mon code. Je veux utiliser auto_ptr en allouant de la mémoire. S'il vous plaît aidez-moi à surmonter ce problème.Implémentation _ptr automatique

Répondre

2

Auto_ptr ne fait pas de tableaux.

std::unique_ptr sera avec un destructeur personnalisé avec le new[]/delete[] typique usecase, mais il y a une façon beaucoup plus simple:

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

Un peu plus compliqué, mais beaucoup plus rapide en raison de spatial locality est d'utiliser un 1 dimensions vecteur.

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

et faire manuellement le dimensionnement avec

mat[row*b+column] 
+2

Vous n'avez pas besoin d'un destructeur personnalisé juste pour utiliser 'std :: unique_ptr' avec un tableau. Vous avez seulement besoin d'un suppresseur personnalisé si le tableau n'a pas été alloué avec 'new []'. –

+0

Il semble que j'ai mal interprété quelque chose que j'ai lu une fois (ou lu quelque chose qui ne va pas). J'aurais dû regarder de plus près le lien que j'ai posté. Merci d'avoir nettoyé @RemyLebeau. – user4581301

+0

La réponse ci-dessus semble fonctionner mais la commande de retour est en train de faire une erreur –