1

La fonction est la suivante:Pourquoi cette fonction segfaulting?

Set::Set(Multinumber* tempArray[], int tempSize) 
{ 
numElements = tempSize; 
capacity = tempSize*2; 
setArray = new Multinumber*[capacity]; 
for (int i=0; i<numElements; i++) 
{ 
    addElement(tempArray[i]); 
} 
} 

La setArray variable est déclarée dans ma tête pour être de type Multinumber **

Il segfaults chaque fois que je l'appelle avec ceci:

Multinumber* carr[2]; 
carr[0]=c4; 
carr[1]=c5; 
Set setb(carr,2); 

c4 et c5 sont déjà des pointeurs déclarés sur les objets du type correct.

Toute aide serait grandement appréciée.

EDIT: Code ci-dessous est fonction addElement (des excuses pour le retrait)

const Set Set::operator+(const Set& rhs) const 
{ 
Set result; 
int i=0, j=0; 

while ((i < numElements) && (j < rhs.numElements)) 
{ 
    Multinumber* toadd=new Multinumber; 
    toadd=*(setArray[i]) + *(rhs.setArray[j]); 
    result.addElement(toadd); 
    i++; 
    j++; 
} 

while ((i < numElements)) 
{ 
    result.addElement(setArray[i]); 
    i++; 
} 


while ((j < rhs.numElements)) 
{ 
result.addElement(rhs.setArray[j]); 
j++; 
} 


return result; 
} 

EDIT: Sur la base de nombreuses déclarations de Cout, erreur semble être dans cette fonction:

bool Set::isFull() 
{ 
    return (numElements == capacity); 
} 

EDIT: Indices de tableau modifiés, mais toujours segmentés

+0

Plus de contexte est nécessaire. Un exemple complet et compilable serait superbe. –

+0

Vous n'avez toujours pas fourni le code pour addElement. Les emplacements probables pour les erreurs sont également le constructeur par défaut, le constructeur de la copie et le destructeur pour la classe Set, donc il vaut mieux poster aussi ce code. – wolfgang

Répondre

6
carr[1]=c4; 
carr[2]=c5; 

Ne devrait pas cela est

carr[0]=c4; 
carr[1]=c5; 

?

Conseil: Si vous chargez ceci dans un débogueur, tel que gdb, il aurait identifié la ligne du coupable et vous auriez vu votre erreur très rapidement.

+2

Je suis un idiot complet et total. Merci –

+1

@Ross Nous faisons tous des erreurs stupides :) – marcog

+0

En fait, encore segfaults malheureusement –

7

Les tableaux utilisent des index de base zéro, donc définir carr[2] à quoi que ce soit dans un tableau de deux longueurs est un comportement indéfini. Tu devrais être reconnaissant que ce soit une faute de disque. :-)

Essayez:

Multinumber* carr[2]; 
carr[0]=c4; 
carr[1]=c5; 
Set setb(carr,2); 

Cela devrait prendre soin de la segfault.

+0

+1 J'étais trop lent. –

+0

Segfaults toujours.Mais ouais, erreur stupide –

+0

Besoin de plus de contexte alors. Veuillez fournir les définitions pour la classe en question ... –