2017-05-24 4 views
-4

J'ai ce code de la classe de programmation:fonction problématique C++, Array Liste

void ToList(List *first, int *arr, int n) { 
    List *p = first; 
    for(int i=0; i<n; i++) { 
     p->x = arr[i]; 
     if (p->next != NULL) p = p->next; 
    } 
} 

Je l'appelle pour transférer un élément de tableau à une liste:

int main() { 

const int N = 10; 
int m[N] = {5, 8, 1, 7, 2, 6, 9, 4, 0, 3}; 

List *first = NULL; 

ToList(first, m, N); 
PrintList(first); 

J'ai obtenu un " Erreur de segmentation "- le programme a terminé avec le code de sortie 139. Quel est le problème et comment peut-il être réparé?

+6

Bienvenue dans Stack Overflow. Veuillez prendre le temps de lire [The Tour] (http://stackoverflow.com/tour) et de consulter le contenu du [Centre d'aide] (http://stackoverflow.com/help/asking) quoi et comment vous pouvez demandez ici. –

+3

Votre liste ('first') est' NULL', et vous n'avez jamais alloué de mémoire pour cela – Alexander

+3

Le bon outil pour résoudre ces problèmes est votre débogueur. Vous devez parcourir votre code ligne par ligne * avant * de demander Stack Overflow. Pour plus d'aide, veuillez lire [Comment déboguer de petits programmes (par Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Au minimum, vous devriez [modifier] votre question pour inclure un exemple [Minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve) qui reproduit votre problème, ainsi que les observations que vous avez faites dans le débogueur. . –

Répondre

1

Il semble que vous déréférencer un pointeur NULL:

En main:

List *first = NULL; 

En ToList:

List *p = first; // first = NULL 
... 
p->x = arr[i] 

Donc, vous devez attribuer à la liste en premier lieu.