1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Problem: C++ Array von Structs

    • Frage
  • davewood
  • 8. Februar 2006 um 14:32
  • Unerledigt
  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 8. Februar 2006 um 14:32
    • #1
    Code
    struct ExportStruct {
    	wxString seq_par;
    	wxString cond;
    	wxString value;
    };
    
    
    ExportStruct p[1];
    p[1].cond = "1"; // geht
    p[1].value = "1"; // geht ned
    p[1].seq_par = "1.1Parameter_1"; //geht ned
    Alles anzeigen

    zur Laufzeit tritt folgender Fehler auf:

    Zitat

    Unhandled exception at 0x0055c253 in Main.exe: 0xC0000005: Access violation reading location 0xb905ca21.

    Fehler dürfte irgendwo bei folgender Stelle in string.h liegen

    Code
    bool  IsShared()  const { return (nRefs > 1);   }

    versteht das jemand?

    Macht irgendwie keinen Sinn für mich.

    david

    I like Toast!

  • Wolfibolfi
    37
    Wolfibolfi
    Mitglied
    Reaktionen
    186
    Punkte
    14.936
    Beiträge
    2.942
    • 8. Februar 2006 um 14:41
    • #2

    Pfff, erstellst ein Array der Größe 1 und willst aufs erste Element zugreifen.
    Pfuscher, hehe.:devil:

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 8. Februar 2006 um 14:42
    • #3

    peinlich peinlich

    array mit Grösse 1

    Zugriff auf index 0 based array mit 1 erzeugt out of bound exception :)

    adios

    david

    I like Toast!

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 8. Februar 2006 um 14:45
    • #4
    Zitat


    Wolfi: 14:35:10: mal nachdenken, hört sich nach sowas an, wo ma pointer und inhalt verwechselt oder so
    Ich: 14:35:54: hmm kanns sein dass der [] operator nen pointer liefert?
    Wolfi: 14:36:20: kann echt sein
    Wolfi: 14:36:25: probiers mal mit ->
    Ich: 14:36:27: nein das wars ned dann schreit der compiler
    Ich: 14:36:33: schon zur compile time
    Ich: 14:36:50: witzig dass es bei dem einem member geht beim anderen ned
    Wolfi: 14:37:56: es müssn aber pointer sein, oda?
    deklariers mal als
    wxString* cond;
    Wolfi: 14:38:03: weil strings sind ja unterschiedlich groß
    Ich: 14:38:08: ich wills aber ned als pointer machen
    Wolfi: 14:38:21: da geht dann sicher nur der erste zugriff, wurscht welches member das is
    Ich: 14:38:33: und es hat an anderer stelle schon mehrmals funktioniert
    Wolfi: 14:38:42: aso
    Ich: 14:39:16: sehr eigenartig. Mit Object Pascal wär das net passiert *g*
    Ich: 14:39:36: ich mach mal nen pointer
    Ich: 14:39:40: und schau obs dann geht
    Ich: 14:39:50: mein programm hat memory leaks ende nie =)
    Ich: 14:41:01: lol
    Ich: 14:41:07: du bis tunfaehig
    Wolfi: 14:41:15: lol
    Ich: 14:41:18: freund hat da smirakel geloest
    Ich: 14:41:20: Freund: 14:40:25: der zugriff auf p ist out-of-bounds
    du legst ein array mit grösse 1 an und greifst mit index 1 zu

    Wolfi: 14:41:29: wuhahaha
    Wolfi: 14:41:31: lol
    Wolfi: 14:43:45: ich war schneller

    Alles anzeigen

    blah :)

    I like Toast!

  • Wolfibolfi
    37
    Wolfibolfi
    Mitglied
    Reaktionen
    186
    Punkte
    14.936
    Beiträge
    2.942
    • 8. Februar 2006 um 14:59
    • #5

    Noch dazu hab ich mich zuerst verschrieben und "Größe 0" geschrieben.

    Üben.:(

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 8. Februar 2006 um 15:35
    • #6

    neues problem :)

    Code
    ExportStruct p[2];
    p[0].seq_par = "1.1Parameter_1";
    p[0].cond = "1";
    p[0].value = "1";
    p[1].seq_par = "1.1Parameter_1";
    p[1].cond = "1";
    p[1].value = "1";
    export(p);
    std::cout << " p: " << sizeof(p) << std::endl; // ergibt 24
    std::cout << " p[0]: " << sizeof(p[0]) << std::endl; // ergibt 12
    .
    .
    .
    
    
    void export(ExportStruct p[]) {
       std::cout << " p: " << sizeof(p) << std::endl; // ergibt 4 
       std::cout << " p[0]: " << sizeof(p[0]) << std::endl; // ergibt 12
    }
    Alles anzeigen

    Ich kann aber in export auf alle elemente zugreifen, nur liefter sizeof(p) immer 4 zurück


    welche Möglichkeit gibts noch die Größe des Arrays zu bestimmen?

    david

    I like Toast!

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 8. Februar 2006 um 17:11
    • #7
    Zitat von davewood

    welche Möglichkeit gibts noch die Größe des Arrays zu bestimmen?


    Die Anzahl der Elemente des Arrays a bestimmst du mit sizeof (a) / sizeof (a[0]).
    Allerdings kannst du in C und C++ keine Arrays als Funktionsargument übergeben; auch wenn du den Parameter wie oben als ExportStruct p[] deklarierst, ist das für den Compiler nichts anderes als ExportStruct *p, also ein Pointer.
    Jeder Ausweg aus dieser Situation hat bestimmte Nachteile (nämlich: der User muß die Funktion richtig verwenden); eine Möglichkeit wäre, export mit zwei Parametern auszustatten, einem für das Array und einem anderen für die Größe.

    *plantsch*

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 9. Februar 2006 um 11:13
    • #8

    Danke kuh, werd wohl sobald ich wieder aufs Institut komme entweder nen Vector dafür verwenden oder deinen Lösungsvorschlag mal genauer unter die Lupe nehmen.

    david

    I like Toast!

  • CornedBee
    2
    CornedBee
    Mitglied
    Punkte
    30
    Beiträge
    6
    • 6. März 2006 um 11:43
    • #9

    std::vector ist üblicherweise die bessere Idee. Oder boost::array, wenn die Größe zur Compile-Time bekannt ist.

    All the buzzt
    CornedBee :face_with_rolling_eyes:

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung