falscher startcode?
-
moin, ich habe ein kleines Problem.
ich habe ein paar Programme mit Visual studio programmiert und bei allen gibt es den gleichen fehler. Die programme lassen sich zwar compilieren aber beim aufruf eigener Funktionen wird das Programm unterbrochen. Und zwar bei
mainret = main(argc, argv, envp);
in der datei crtexe.cAlso zB geht es in dem Programm nur darum mal eine Liste zu erstellen, sicher is der code noch nicht ganz richtig..(ich seh noch nicht so ganz bei den zeigern durch) aber ich denke mal das bekomme ich schon noch hin...aufjeden fall kommt beim ausführen der erwähnte fehler...(compilieren lässt es sich)
#include <stdio.h> #include <stdlib.h> typedef struct Listele *IntList; typedef struct Listele { int zahl; IntList next; }Listele; void insert(IntList *l, int n){ IntList help; help=(IntList) malloc(sizeof(Listele)); while(1){ if ((*l)->next == NULL) { help->next=NULL; (*l) = help; help->zahl=n; return; } else{ if ((*l)->zahl > n){ int help2=(*l)->zahl; (*l)->zahl=n; help->next=(*l)->next; (*l)->next=help; help->zahl=help2; return; } } (*l)=(*l)->next; } } int main() { IntList a; a=(IntList) malloc(sizeof(Listele)); insert(&a,5); insert(&a,1); insert(&a,2); insert(&a,3); insert(&a,5); insert(&a,8); insert(&a,6); insert(&a,3); while (a->next != NULL) { printf("%d \n",a->zahl); a=a->next; } return 0; }also das projekt ist eine konsolenanwendung und ich hab es einmal mit nem leeren projekt ausprobiert..ka ob deswegen vlcht irgendetwas fehlt...
ich hab gelesen dass das mit irgendeinem startcode zu tun hat...weiß jemnad was ich ändern muss??Ich danke schonmal für die antworten
PS.: bin neu im Forum..ich hoffe mal ich hab alles richtig gemacht...
Gruß Matze
-
19matz91 schrieb:
moin, ich habe ein kleines Problem. In der Uni konnte ich die meisten Programme die ich geschrieben habe problemlos compilieren.
Kompilieren ja. Aber ausführen?
19matz91 schrieb:
Doch die Programme die ich zu Hause mit Visual studio programmiert habe, werden beim aufruf eigener Funktionen immer abgebrochen.
Du hast ja auch "UB" (undefined behaviour). Du legst Listen-Elemente an, in denen Datenmüll steht. Der next-Zeiger ist uninitialisiert, Du dereferenzierst ihn aber mehrfach.
Ich würde Dir auch empfehlen, keinen typedef-Namen für einfache Zeiger anzulegen und von den Vorzügen von C++ gebrauch zu machen. structs brauchen kein extra typedef. malloc+cast/free kann durch new/delete ersetzt werden. Referenzen auf Zeiger sind in diesem Falle praktisch:
#include <iostream> struct ListElem { int datum; ListElem* next; }; void einfuegen(ListElem * & liste, int dat) { ListElem* neu = new ListElem; neu->datum = dat; neu->next = liste; liste = neu; } void alles_loeschen(ListElem * & liste) { if (liste) { alles_loeschen(liste->next); delete liste; liste = 0; } } int main() { ListElem* start = 0; einfuegen(start,23); einfuegen(start,42); for (ListElem* p = start; p; p = p->next) { std::cout << p->datum << '\n'; } alles_loeschen(start); }
-
Das sieht mir nicht so aus, als wollte der Threadersteller in C++ schreiben, denn es handelt sich um syntaktisch richtiges C. An der Tatsache, dass es semantisch ziemlicher Unsinn ist und undefiniertes Verhalten verursacht, ändert dies natürlich nichts. Das wird dann wahrscheinlich auch der Grund für die Probleme sein, wie krümelkacker schon sagte. Aber im C Forum kann sicherlich besser geholfen werden, als mit einer alternativen C++-Lösung.
-
jo...das sollte c++ sein..^^
mm ok das Programm ist unsinn...ich habe wie gesagt das ganze hin und her referenzieren mit den zeigern noch ni ganz verstanden...das soll aber ni das problem sein...auch wenn ich krümelkackers code compiliere bekomme ich 102 fehlermedungen in irgneedeiner cstdio.
Wieso bekomme ich ständig fehlermeldungen in anderen dateien...ist da stdio ni richtig eingebunden oder was könnte da lossein??
-
19matz91 schrieb:
auch wenn ich krümelkackers code compiliere bekomme ich 102 fehlermedungen in irgneedeiner cstdio.
Komisch. Hier geht's. Musst Du vielleicht mal in die Dokumentation Deines Compilers nachschauen.
-
Du speicherst das Beispiel von Krümelkacker jetzt aber nicht als .c ab, oder?
cstdio ist der C++-Header für das stdio.h in C. Wird ein C-Compiler also nicht finden...
-
Erst präsentierst du einen lupenreiner C Code. Dann hast du 1000 Fehlermeldungen beim Compilieren eines korrekten C++ Programms. Und du behauptest trotzdem, du willst C++ machen?

-
super...thx...=)jetzt geht krümelkackers code
ein paar leute haben behauptet es wäre wurscht was da nun für ne endung hinten dransteht...ds hat mich irritiert...ich dachte auch c++ impliziert c vollkommenmeine code wird trotzdem immer wieder unterbrochen...ich schaus mir heut abend noch mal an...es sollte ja ne insert funktion werden die nicht einfach so einfügt sondern einsortiert...