Bonjour,

dans mon programme j'ai deux classes template dans lesquelles les allocations mémoires sont générées dynamiquement :
Sc_DynamicVector<T> qui possède un T* array en attribut et Sc_DynamicMatrix<T> avec un attribut Sc_DynamicVector<T>* matrix.

Le bug survient à l'exécution (plantage de la console) quand j'essaie d'allouer un tableau de Sc_DynamicVector<T> afin de le passer au constructeur de Sc_DynamicMatrix<T>.

Voilà le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
double tabtest[6]={10,9,8,7,6,1};
double tabtest2[6]={3,3,4,4,5,5};
Sc_DynamicVector<double> *v1=new Sc_DynamicVector<double>(6, tabtest);
Sc_DynamicVector<double> *v2=new Sc_DynamicVector<double>(6, tabtest2);
 
Sc_DynamicVector<double> *tabVect = new Sc_DynamicVector<double>[3];
tabVect[0]=*v1; tabVect[1]=*v1; tabVect[2]=*v1; 
Sc_DynamicMatrix<double> m1, m2(3, tabVect);
C'est seulement quand je décommente la partie tabVect[1]=*v1; tabVect[2]=*v1; que le programme plante.
Si je n'alloue pas dynamiquement le tableau de Sc_DynamicVector<double>, c'est à la déclaration de m2 que ça plante.

Et le code des constructeurs (car le problème vient peut-etre aussi de là ) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
template <class T>
Sc_DynamicVector<T>::Sc_DynamicVector(unsigned int _size, T* _array)
{
	size=_size;
 
	array=new T[size];
	for(unsigned int i=0; i<size;i++){
		array[i]=_array[i];
	}
}
 
template <class T>
Sc_DynamicMatrix<T>::Sc_DynamicMatrix()
{
	size=1;
 
	mat=new Sc_DynamicVector<T>[size];
	mat[0]=Sc_DynamicVector<T>();
}
 
template <class T>
Sc_DynamicMatrix<T>::Sc_DynamicMatrix(unsigned int _size, Sc_DynamicVector<T> * _mat)
{
	size=_size;
 
	mat=new Sc_DynamicVector<T>[size];
	for(unsigned int i=0;i<size;i++){
		mat[i]=Sc_DynamicVector<T>(_mat[i]);
	}
}
Si quelqu'un saurait me sortir de cette impasse (assez prise de tête quand même )...