2013-10-10 6 views
1

Salut, j'ai un objet tableau dans mon fichier d'en-tête.Erreur de segment de segment C++

private: 
Customer** customerListArray; 

Puis dans mon dossier du RPC je régler la taille du tableau et ajouter des objets comme suit,

void AppManager::createArrays(vector<vector<string> > data) { 

    customerListArray = new Customer* [data.size()]; 

    for (unsigned int i = 0; i < data.size(); i++){ 

     try { 

      Customer* cust = createCustomerObject(data[i]); 
      customerListArray[i] = cust; 
     } 
     catch(string err) { 

      cout << "Error processing line '" << i << "' of data file. Error Message : " << err << "\n"; 
     } 
    } 
} 

Taille du vecteur de données est d'environ 14 000 articles. Cependant, quand je boucle à travers customerListArray et éléments d'impression que je reçois l'erreur suivante,

C5545 - Burton G. Craft - 3/1/14 
C5546 - Zena F. Wallace - 10/2/14 
C5547 - Ursa P. Orr - 20/4/14 
C5548 - Adara X. Rogers - 3/6/13 
C5549 - Carter L. Newman - 15/1/14 
C5550 - Maxwell V. Watkins - 5/6/13 
C5551 - Ria V. Morrow - 8/12/12 
C5552 - Kirk Z. Hines - 27/4/14 
C5553 - Brent L. Bentley - 13/10/13 
C5554 - Thane W. Cobb - 8/8/14 
C5555 - Serina M. Macias - 13/8/13 
C5556 - Maryam J. Lynch - 1/6/13 
C5557 - Breanna M. Lewis - 20/10/13 
Segmentation fault 

Il se bloque toujours à l'article C5557 avec une erreur de segmentation. Quand j'utilise un vecteur, tout fonctionne bien. mais mon exigence est d'utiliser un tableau par l'affectation.

S'il vous plaît aviser :)

Merci.

Edit:

vector<vector<string> > data= fileReader(customerFile); 
data= customerVals.size(); //about 14000 records 

//debug priting 
for (unsigned int i = 0; i < numOfCustomers; i++) { 
     Customer* cust = customerListArray[i]; 
     cout << cust->getCustomerId() << " - " << cust->getName() << " - " << cust->getDateLastPurchased()->getDay() << "/" << cust->getDateLastPurchased()->getMonth() << "/" << cust->getDateLastPurchased()->getYear() << "\n"; 
} 
+0

Qu'est-ce que 'data.size()', et qu'est-ce que 'i' quand le programme plante? Ajouter quelques impressions. – kevintodisco

+1

Probablement besoin d'afficher la boucle que vous utilisez pour l'impression - après tout c'est l'endroit où l'accident se produit. – DrC

+0

Est-ce que vous vérifiez 'NULL' avant d'imprimer? –

Répondre

0

do'h! J'ai oublié de vérifier null, merci beaucoup, l'élément 5558 ne sera jamais ajouté au tableau à cause d'une exception et donc c'est nul!

for (unsigned int i = 0; i < numOfCustomers; i++) { 

     Customer* cust = customerListArray[i]; 
     if(cust != NULL) { 

      cout << cust->getCustomerId() << " - " << cust->getName() << " - " << cust->getDateLastPurchased()->getDay() << "/" << cust->getDateLastPurchased()->getMonth() << "/" << cust->getDateLastPurchased()->getYear() << "\n"; 
     } 
    } 

La recherche de la valeur NULL a résolu le problème!

+0

Est-ce que cette version ou cette version de débogage est créée? Je m'attendrais à ce que dans la version release, en cas d'exception, le pointeur ne soit pas initialisé et ait une valeur de garbage. Ce ne serait pas NULL mais ne pointerait pas non plus vers un objet valide. Je pense que vous devriez le mettre explicitement à NULL dans le bloc 'catch'. – danadam

+0

fera merci :) –

Questions connexes