malloc undefined
Derzeit arbeite ich an umschreiben eine verknüpfte Listen-Modul und ich bekomme einige seltsame Fehler.
In zwei IDEs (Netbeans & Visual Studio Express), bekomme ich eine Warnung, dass malloc nicht definiert ist und eine Funktion gefunden, die in meinem linkedlist.c Datei nicht definiert.
unten sind meine 3 Dateien.
main.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;
}
Jegliche Hilfe würde sehr geschätzt werden. Ich bin nicht sicher, ob dies ein syntax-Problem oder fehlende Dateien auf meinem computer.
InformationsquelleAutor FrostedPixel | 2010-12-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wo Sie sind
<stdlib.h>
ein - denn das ist, womalloc()
deklariert ist?Ist dies eine Zusammenstellung problem (
malloc()
schwarzarbeit) oder eine Verknüpfung von problem (malloc()
undefined)?Was genau ist die Fehlermeldung?
Nun der code lesbar ist:
<cstdlib>
ist eine C++ - header (so ist<cstdio>
).<stdlib.h>
in C.<stdlib.h>
wo diemalloc()
- Funktion verwendet wird - inlinkedlist.c
.Haben Sie auch die header-guards an der falschen Stelle in
linkedlist.h
. Die kanonische Struktur einer header-Datei:Den
#endif
ist die Letzte, die kein Kommentar ist, nicht-leere Zeile in der Datei, nicht der Dritte.Ihre Daten-Strukturen sind außerordentlich kompliziert, selbst für eine doppelt-verkettete Liste. Sind Sie sicher, dass Sie gehen, um sein müssen der Länge so oft, dass es garantiert die Aufrechterhaltung der Zeiger auf den Kopf, in jedem Knoten in der Liste? Ich würde sein überrascht, wenn Sie es verwenden, die oft. Ich gehe davon aus, dass Sie die Zeiger-auf-Kopf in jedem Knoten, so dass, wenn Sie entfernen einen beliebigen Knoten aus der Liste können Sie verringern die Länge der Liste. Sie wäre wahrscheinlich besser dran, übergeben Sie einen Zeiger auf die Liste und die Zeiger auf den Knoten, die gelöscht werden, als das, was Sie haben.
Können, sehe ich keine Rechtfertigung für die
length = 5
imnew_list()
Funktion.Auch C und C++ unterscheiden sich radikal auf den Sinn von:
In C++, das bedeutet "
new_list()
ist eine Funktion, die nimmt keine Argumente und gibt einenstruct linked_list
"Zeiger".In C, das bedeutet "
new_list()
ist eine Funktion mit einem völlig unbestimmten "argument list gibt einestruct linked_list
"Zeiger". Die Funktion deklariert ist, aber es ist kein Prototyp für die Funktion.In C, sollten Sie schreiben:
Persönlich sehe ich lieber
extern
vor Funktionsdeklarationen im Header; ist es eigentlich nicht notwendig für die Funktionen, aber da es (extern
) ist (oder sein sollte) notwendig für die deklarierten Variablen in der Header, ich bevorzuge die Symmetrie bei Funktionen deklariert in der Header.Die
void *data
element sollte inlinked_list_node
und dann brauchen Sie nichtlinked_list_data
überhaupt. Sie sollten auch festlegentemp_list->head_node_ptr = 0;
imnew_list()
Funktion.InformationsquelleAutor Jonathan Leffler
Ihrer Frage, es scheint, Sie sind auf einer Windows-Maschine. Möglicherweise haben Sie zu tun:
um malloc() zur Verfügung.
InformationsquelleAutor Ducain
cstdlib
undcstdio
sind nicht standard-C-Header. Vielleicht meintest dustdlib.h
undstdio.h
.InformationsquelleAutor Matthew Flaschen
müssen Sie
malloc()
wie unten:InformationsquelleAutor Ali Sherafat