Beiträge von sommeralex

    Hallo, und guten Abend ;) PS: Danke für "eure" Hilfe übrigens - jene, die mir bis jetzt schon von und durch euch zugute kam.

    Heute habe ich eine theoretische frage, die ich in meiner literatur (Primer Plus C) leider nicht vorfinden kann..

    wenn ich ein struct A definiere, welches selbst wieder ein struct a hat, und ich zur laufzeit dieses struct A mit malloc deklariere, muss ich dann nicht auch mein struct a mit malloc alloziieren? wenn ja/nein, warum? ebenso: wenn ich mein struct A mit "free" freigebe, muss ich mich dann auch um mein struct a mit free kümmern?

    auf http://www.pronix.de/pronix-827.html gibt es zwar ein beispiel einer dynamisch erzeugten & verketteten liste von structs A (welche zusätzlich auch ein struct a enthält) und dieses a wird NICHT über malloc erzeugt o gelöscht - aber ich weiß leider nicht, warum..

    struct a{

    //irgendwelche variablen

    }


    struct A{

    struct a ein_a;

    }


    BZW.


    struct A{

    struct a *ein_a_pointer;

    }


    Und die Frage ist jetzt, ob ich, wenn ich struct A über malloc dynamisch erstelle, ich auch das struct a dynmisch (malloc) erstellen muss, bzw in der zweiten variante, den pointer von struct a mit malloc..

    alex

    ich hab mich natürlich verschrieben, korrektur: (habs im original auch ausgebessert)

    #include <stdio.h>
    #include "extern.h"
    #include <stdlib.h>
    #include<time.h>
    typedef struct a apfel;
    typedef struct w wurm;

    struct a{

    int groesse;
    wurm wurmi[10];
    };

    struct w{

    int essgeschwindigkeit;

    };





    int main(void)
    {

    apfel meinapfel;

    //nicht apfel.wurmi[0].essgeschwindigkeit = 4;

    meinapfel.wurmi[0].essgeschwindigkeit = 4; //compiler fehlermeldung:
    //"process returned -23239384*




    return 0;
    }

    Hallo! Könnte mir hier jemand bitte helfen? (die hilfe von hal war berechtigt, doch handelte es sich nur um einen rechtschreibfehler und hat das problem nicht behoben, da sich der rechtschreibfehler erst durch das copy&pasten in dieses forum eingeschlichen hat)

    #include <stdio.h>
    #include "extern.h"
    #include <stdlib.h>
    #include<time.h>

    typedef struct a apfel;
    typedef struct w wurm;

    struct a{

    int groesse;
    wurm wurmi[10];

    };

    struct w{

    int essgeschwindigkeit;

    };


    int main(void)
    {

    apfel meinapfel;
    meinapfel.wurmi[2].essgeschwindigkeit = 4; //- geht leider nicht, warum?
    //bzw, prinzipiell: wann muss malloc verwendet werden, und wann nicht?
    //Dabei interessiert mich folgender zusammenhang: warum kann ich auf
    //das struct objekt "wurmi" zugreifen, nachdem der zeiger "meinapfel"
    //deklariert wurde (und speicher alloziirt wurde) ABER "wurmi" selbst kein
    //"zeiger" ist. anders: müsste nicht "wurmi" auch ein pointer sein - den ich
    //vorher explizit über malloc speicher zuweise?



    return 0;
    }

    ----------------------------------
    folgendes geht nämlich:
    ----------------------------------

    #include <stdio.h>
    #include "extern.h"
    #include <stdlib.h>
    #include<time.h>
    typedef struct a apfel;
    typedef struct w wurm;
    struct a{
    int groesse;
    wurm wurmi[10];
    };
    struct w{
    int essgeschwindigkeit;
    };


    int main(void)
    {

    apfel *meinapfel;

    meinapfel = (struct a*)malloc(sizeof(apfel));
    meinapfel->wurmi[1].essgeschwindigkeit = 4;
    //meinapfel.wurmi = (struct w*) malloc(10 * sizeof(wurm));
    int x = meinapfel->wurmi[1].essgeschwindigkeit;
    printf("%d\n", x);

    return 0;
    }


    danke, lg alex

    Hallo! Hoffentlich kann mir hier jemand helfen, seit 2 Tagen stets das selbe Dilemma :distur: :

    Wie kann ich, wenn ich mehrere files.c habe, welche variablen vom typ struct haben, es ermöglichen, dass ein typ struct einer file a den zeiger struct einer file b und umgekehrt, enthält?

    ---- extern1.c ----

    #include "extern1.h"
    #include "extern2.h" //damit apfel gefunden wird


    ---- extern1.h ----

    typedef struct w wurm;

    struct w{

    apfel *a;

    };

    ---- extern2.c ----

    #include "extern2.h"
    #include "extern1.h" //damit wurm gefunden wird

    ---- extern2.h ----

    typedef struct a apfel;

    struct a{

    wurm *w;

    };

    ---- main.c ---- (reines dummy) hier möchte ich dann wurm u apfel verwenden, doch soweit kommt es erst gar nicht, aufgrund unten angeführter fehlermeldung.

    #include "extern.h"
    #include "extern2.h"

    #include <stdio.h>
    int main()
    {

    return 0;

    };

    ---- ende ----

    Compiler Fehlermeldung:

    C:\Program Files\PellesC\Projects\structi\extern1.c(1): warning #1039: [ISO] No newline at end of file.
    C:\Program Files\PellesC\Projects\structi\extern1.h(6): error #2078: Invalid struct field declarations.
    C:\Program Files\PellesC\Projects\structi\extern1.h(6): error #2001: Syntax error; found 'apfel' expecting '}'.
    C:\Program Files\PellesC\Projects\structi\extern1.h(8): error #2156: Unrecognized declaration.
    *** Error code: 1 ***


    Bin für jede erdenkliche Hilfe dankbar!
    LG Alex

    dieses main/extern beispiel hab ich nur gepostet, weil bei meinem projekt diese modularisierung nicht funktioniert, und hier habe ich bestimmt kein "struct" syntax falsch geschrieben: http://www.learnclip.com/LearnClip.zip

    ich vermute, dass es aufgrund der prozeduralen vorgangsweise des compilers fehler in der registrierung (speicherreservierung im register) der struct variabeln gibt.

    BEISPIEL:

    extern1 file --

    struct a {

    struct b

    }

    extern 2 file --

    struct b {

    struct a

    }

    main file --

    include extern 1 - fehler, weil struct b noch nicht bekannt


    gibt es da eine schöne lösung? ein pattern?

    trotzdem danke für deine hilfe! im folgenden die fehlerausgabe (in lc.c) befindet sich die main zum ausführen.


    F:\Programme\PellesC\Projects\LearnClip\LC.c(42): warning #1039: [ISO] No newline at end of file.
    F:\Programme\PellesC\Projects\LearnClip\LC_BOOK.h(7): error #2078: Invalid struct field declarations.
    F:\Programme\PellesC\Projects\LearnClip\LC_BOOK.h(7): error #2001: Syntax error; found 'configuration' expecting '}'.
    F:\Programme\PellesC\Projects\LearnClip\LC_BOOK.h(10): warning #2099: Missing type specifier.
    F:\Programme\PellesC\Projects\LearnClip\LC_BOOK.h(10): error #2001: Syntax error; found '*' expecting ';'.
    F:\Programme\PellesC\Projects\LearnClip\LC_BOOK.h(10): warning #2099: Missing type specifier.
    F:\Programme\PellesC\Projects\LearnClip\LC_BOOK.h(13): error #2156: Unrecognized declaration.
    F:\Programme\PellesC\Projects\LearnClip\LC_UNIT.h(6): error #2121: Redeclaration of 'unit'.
    F:\Programme\PellesC\Projects\LearnClip\LC_UNIT.h(25): error #2001: Syntax error; found 'configuration' expecting '}'.
    F:\Programme\PellesC\Projects\LearnClip\LC_UNIT.h(26): error #2001: Syntax error; found '_unit' expecting ';'.
    F:\Programme\PellesC\Projects\LearnClip\LC_UNIT.h(26): warning #2099: Missing type specifier.
    F:\Programme\PellesC\Projects\LearnClip\LC_UNIT.h(26): error #2082: Invalid initialization type; found 'void *' expected 'int'.
    F:\Programme\PellesC\Projects\LearnClip\LC_UNIT.h(28): error #2156: Unrecognized declaration.

    --- extern2.h beispiel code ---


    struct names_st{

    char first[10];


    };

    //typedef names_st names;

    --- code ende ---

    solange "typedef names_st names;" ausgeblendet wird, passt alles. aber wehe es wird aktiviert. funktioniert es nicht. obwohl ich ein ähnliches dummy struct in extern.h mit selber syntax habe! ) [typedef type varname;]

    hallo!

    C spukt. und ich hab den beweis, vielleicht sieht jemand den wald, ich sehe ihn vor läuter bäumen leider nicht.

    mein programm ist "modularisiert". daher: ich hab ein main.c file, (darin die main methode) und ein extern.c file. darin eine beispielmethode die ich aus main aufrufen möchte. Zusätzlich hab ich in extern.h (header datei) ein struct. dieses include ich in extern.c. in main include ich extern.h und alles funktioniert.

    soweit, sogut.

    wenn ich das ganze jetzt wiederhole, also ein extern2.h file mache + extern2.c file, diese sauber include, (also extern2.h in extern2.c include und extern2.h in main.c inklude, GEHT DAS NICHT.

    das ist ein witz.

    auf http://www.learnclip.com/cspukt.zip das beispiel. bitte um hilfe.

    lg, danke, alex

    Hallo & guten Abend,


    in meinem beispielprojekt funktioniert leider etwas nicht ganz so, wie ich es mir wünsche. vielleicht könnte mir hier jemand helfen, ich wäre sehr dankbar! also:

    ich hab zwei files. die eine "main.c" die andere "extern.c"

    die main.c sieht so aus:

    #include <stdio.h>

    int main(){
    printf("Test");
    int ergebnis = mulitpliziere(3,4);
    return 0;
    }

    die extern.c sieht so aus:

    #include <stdio.h>

    typedef struct{

    int x;
    double y;
    float z;

    }struktur;

    int multipliziere(int a, int b){

    return a * b;

    }

    ----------------------------

    dabei kann ich aus der main.c file heraus die funktion mulipliziere ansprechen. aber auf mein struktur objekt nicht. ein "struct struktur test;" ist nicht möglich. auch mit pointern kann ich nicht arbeiten, da ich keinen pointer in meiner main funktion deklarieren kann, der eben vom typ struktur ist, da der compiler den nicht findet. habs auch mit "external" experiementiert, aber mein bauch sagt mir, dass ich etwas prinzipielles übersehe.

    Hallo!

    Ich hab folgendes Problem, und hoffe, dass mir hier wieder jemand helfen kann. Wie erstellt man eine verlinkte Liste von structs X, die selbst aber WIEDER eine verlinkte liste von structs Y haben?

    dabei verwende ich folgende literatur: http://www.pronix.de/pronix-827.html

    in diesem beispiel wird global ein struct zeiger erstellt, um festzustellen, ob die liste leer ist, bzw genauer: um stets auf den anfang der liste zugreifen zu können. mein problem ist, dass ich keine globale variable(n) für die structs Y erstellen kann, da diese ja dynamisch in den struct X objekten, erstellt werden.

    wie zum beispiel würde ein struct X aussehen? vielleicht so:

    struct x{

    struct y *next?

    }


    es muss doch irgendwo beispiele einer liste mit listen geben? + den typischen operationen, wie suchen, löschen, einfügen, anängen, etc.

    vielen dank..

    Hallo!

    ein gutes beispiel zu pointern ist folgendes (aus "C for Java Programmers" von J.Maassen - trotzdem ist mir immer noch einiges nicht klar..:

    #include <studio.h>

    int j, k;
    int *ptr;

    int main (void)
    {

    j = 1;
    k = 2;
    ptr = &k;

    printf("j has value %d and is stored at %p\n", j, &j);
    printf("k has value %d and is stored at %p\n", k, &k);
    printf("ptr has value %p and is stored at %p\n", ptr, &ptr);
    printf("value of integer ppointed to by ptr is %d\n", *ptr);

    return 0;

    }


    /* OUTPUT */

    j has value 1 and is stored at 0x804972c
    k has value 2 and is stored at 0x8049734
    ptr has value 0x8049734 and is stored at 0x8049730
    value of integer pointed to by ptr is 2;

    /* Output ende */


    Soweit, so gut.


    1) Warum aber kann ich gewisse pointer deklararationen nur VOR der Main Methode machen?
    2) Bzw: Wie unterscheiden sich Deklarationen vor der Main Methode, sowie in der Main Methode?

    Beispielsweise funktioniert folgendes nicht (warum?):

    #include <blabla>

    struct object p{

    };

    //zeiger auf object struct
    struct interval *pa;
    //zeiger pa zeige auf p
    pa = &p;

    main{
    //blabla
    }


    geht nicht, fehlermeldung: "Redeclaration of 'pa' previously declared" aber:

    #include<blabla>

    struct object p{

    };

    //initialisieren + deklarieren aufeinmal
    struct interval *pa = &p;

    main{
    //blabla
    }


    es ist mir bewusst, dass ein pointer, der deklariert wird, ohne vorher auf etwas zu referenzieren, probleme macht. aber ich befürchte, dass ich prinzipiell einiges noch immer nicht verstanden habe. vorallem, wie ich Pointer vor main, in main, und dynamisch behandle..

    kennt jemand eine gute seite? bzw sieht jemand meine denkfehler?

    Hallo + schönen Sonntag!


    Gibt es vielleicht eine Möglichkeit, in C "quasi-threads", ohne posix o.ä zu erzeugen?

    Beispielsweise sollte eine Variable von 0 auf 100 laufen, mit der Option, diese Inkrementierung über die Konsole zu stoppen und den stop-wert auszugeben.

    Falls nicht, weiß jemand, wie ich threads in C (nicht C++) unter WinXP erzeuge, und gleichzeitig meine Thread-Funktionen portierbar lasse, um sie später an z.B einen Mikroprozessor anzupassen?

    LG Alex

    hallo!

    wenn ich eine dynm. verkette liste von structs habe, deren listenlänge maximal ist,

    arbeite ich mit einer dynm. speicherallokation. aber wann/warum verwende ich "stacks" in C? Vor kurzem las ich (hab diese internet quelle aber leider nicht mehr gefunden) dass stacks im allgemeinen effizienter als malloc anforderungen sind, da sie nicht ständig den heap herumwurschteln.

    daher meine frage: wenn ich eine maximale länge von dyn. verketteten strucst benötige wobei es auf die reihenfolge dieser structs in meiner liste ankommt, (ich also bei einer lösch anforderung die zeiger umbiegen muss) kann ich dass auch effizienter mit stacks implementieren?

    in anderen worten: ich programmiere derzeit ein eine hardware, mit äußerst begrentzen ressourcen, diese nimmt neue struct elemente auf. von zeit zu zeit werde aber manche structs gelöscht, und die darauf folgenden in der liste müssen "nachrücken" was jedoch über zeiger realisiert wird. ich denke, dies ist effizienter als in einem array, weil eben nichts "wirklich" nachrückt. aber ginge es mit stacks nicht noch effizienter? oder geht es bei diesem stack vs. malloc nur um einen floh, den ich missverstanden habe?