malloc undefined
Je suis actuellement en train de travailler sur la réécriture d'une liste liée module et je reçois des erreurs étranges.
Dans deux Ide (Netbeans & Visual Studio Express), je reçois un avertissement que malloc est pas défini et qu'une fonction se trouvant dans mon linkedlist.fichier c est pas défini.
ci-dessous sont mes 3 fichiers.
principal.c
#include <stdlib.h>
#include <stdio.h>
#include "linkedlist.h"
int main(void){
struct linked_list * l_list;
l_list = new_list();
printf("%i", l_list->length);
getchar();
return (EXIT_SUCCESS);
}
linkedlist.h
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
struct linked_list{
int length;
struct linked_list_node * head_node_ptr;
};
struct linked_list_node{
struct linked_list_node * prev_node_ptr;
struct linked_list_node * next_node_ptr;
struct linked_list_data * head_data_ptr;
};
struct linked_list_data{
struct linked_list_data * prev_data_ptr;
struct linked_list_data * next_data_ptr;
void * data;
};
struct linked_list * new_list();
#endif
linkedlist.c
#include "linkedlist.h"
struct linked_list * new_list(){
struct linked_list * temp_list = malloc(sizeof(struct linked_list));
temp_list->length = 5;
return temp_list;
}
Toute aide serait grandement appréciée. Je ne suis pas sûr si c'est un problème de syntaxe ou des fichiers manquants sur mon ordinateur.
OriginalL'auteur FrostedPixel | 2010-12-25
Vous devez vous connecter pour publier un commentaire.
Où avez-vous inclure
<stdlib.h>
- parce que c'est làmalloc()
est déclarée?Est-ce un problème de compilation (
malloc()
non déclarées) ou d'un problème de liaison (malloc()
pas défini)?Quel est exactement le message d'erreur?
Maintenant le code est lisible:
<cstdlib>
est un en-tête C++ (donc<cstdio>
).<stdlib.h>
dans C.<stdlib.h>
où lamalloc()
fonction est utilisée enlinkedlist.c
.Vous avez également la tête des gardes au mauvais endroit dans
linkedlist.h
. La structure canonique pour un fichier d'en-tête est:La
#endif
est le dernier non-commentaire, non ligne vide dans le fichier - pas le troisième.Vos structures de données sont extraordinairement compliqué, même pour une liste à double liaison. Êtes-vous sûr que vous allez avoir besoin de la longueur, de sorte que souvent il garantit le maintien du pointeur à la tête de chaque nœud dans la liste? Je serais surpris si vous l'utilisez souvent. Je suppose que vous avez le pointeur-à-tête dans chaque nœud de sorte que lorsque vous retirez l'arbitraire d'un nœud de la liste, vous pouvez décrémenter la longueur de la liste. Vous seriez probablement mieux lotis en passant un pointeur vers la liste et le pointeur vers le nœud d'être supprimés que ce que vous avez.
Je ne vois pas de justification pour la
length = 5
dans lenew_list()
fonction.Aussi, le C et le C++ diffèrent radicalement le sens de:
En C++, qui signifie "
new_list()
est une fonction qui ne prend pas d'argument et renvoie unstruct linked_list
pointeur".En C, qui signifie "
new_list()
est une fonction avec un complètement indéterminée liste d'argument qui renvoie unestruct linked_list
pointeur". La fonction est déclarée, mais il n'y a pas de prototype de la fonction.En C, vous devez écrire:
Personnellement, je préfère voir
extern
devant les déclarations de fonction dans les en-têtes; il n'est pas nécessaire pour les fonctions, mais puisqu'il (extern
) est (ou devrait être) nécessaires pour les variables déclarées dans les en-têtes, je préfère la symétrie pour les fonctions déclarées dans les en-têtes.Le
void *data
élément doit être enlinked_list_node
et puis vous n'avez pas besoinlinked_list_data
à tous. Vous devez également définirtemp_list->head_node_ptr = 0;
dans lenew_list()
fonction.OriginalL'auteur Jonathan Leffler
De votre question, il semble que vous êtes sur une machine Windows. Vous pourriez avoir à faire:
afin d'avoir malloc() disponible.
OriginalL'auteur Ducain
cstdlib
etcstdio
ne sont pas la norme C-têtes. Peut-être que vous avez voulu direstdlib.h
etstdio.h
.OriginalL'auteur Matthew Flaschen
vous devez utiliser
malloc()
comme ci-dessous:OriginalL'auteur Ali Sherafat