Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème fonction basique en C

25 novembre 2020 à 21:18:15

Bonjour, j'essayais de créer une fonction assez simple en C le but étant de retourner la donnée dans le noeud d'une liste à un indice donnée :

int list_get(const struct list *self, size_t index) {

	if (index<0)
		return 0;
		
	struct list_node *curr = self->first;
	
	size_t i=0;
	while ( (i<index) && (curr->next!=NULL)) {
		curr = curr->next;
		i++;
	}
	if (i = index)
		return curr->data;
	return 0;

}



La fonction segfault et je ne sais pas pourquoi, quelqu'un aurait des idées ?

-
Edité par Velas_ 25 novembre 2020 à 21:18:40

  • Partager sur Facebook
  • Partager sur Twitter
25 novembre 2020 à 21:34:27

Bonsoir,

segfault = (en général) accès illégal à un emplacement mémoire; genre déréférencer NULL ou une adresse qui n'a pas été allouée ou une accès à une zone mémoire libérée … bref : le problème est dans les accès mémoire.

Je peux voir que tu ne compiles pas avec les options qui te préviennent d'erreurs éventuelles, le if en l13 n'est pas une conditionnelle mais une affectation. Ajoute -Wall -Wextra …

Pour avoir plus d'infos, essaye de compiler avec les options debug et utilise un outil comme valgrind. 

  • Partager sur Facebook
  • Partager sur Twitter
25 novembre 2020 à 23:15:40

Le test en ligne 13 est faux il faut écrire 

if (i == index)

Tel qu'il est écrit si index est est non nul, le test sera vrai .

  • Partager sur Facebook
  • Partager sur Twitter

Le crayon la gomme et le papier sont les meilleurs outils du programmeur !

26 novembre 2020 à 10:34:44

Utilise un debugger quand ça plante, on ne s'amuse pas à deviner quand on développe.
  • Partager sur Facebook
  • Partager sur Twitter

git is great because Linus did it, mercurial is better because he didn't.