mikrocontroller.net

Forum: PC-Programmierung realloc kopiert nur einen teil der daten


Autor: Michael H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein bizarres Problem mit der realloc. Es scheint nur einen Teil 
der daten zu kopieren, bessergesagt immer nur den 1. Datensatz.

Den datensatz habe ich so erzeugt: malloc(sizeof(mytype)*anzahl). Jetzt 
möchte ich das ganze mit realloc vergrößern:

not yet changed:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
name1    1    b

Wenn ich realloc mache:
changed:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
(null)    0    (null) (müsste der inhalt der 2. zeile stehen)
(null)    0    (null) (hier ist es okay, dass überall null steht)

Hat jemand einen Tipp für mich?

Michael

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Quelltext...?

Autor: Michael H. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
betreffende datei im anhang...

Autor: Michael H. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
falsche datei... hier kommt die richtige

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Headerdatei brauchts auch noch, ohne die Typdefinitionen kann man da 
nur raten.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lass doch mal die größe anzeigen. (uds_table->colums*UDS_COLUM_SIZE());

Ich glaube kaum das realloc was falsch macht, kann also bloss eine 
Fehler in der größenberechnung sein.

Autor: Michael H. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Datenstruktur ist angehängt.

Anbei die Datenstruktur:
michael[uds]$ ./uds
This is a mainfunction for individual testing. Later it gonna be 
removed!
not yet changed:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
changed (Reallocsize: 28:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
(null)    0    (null)
not yet changed:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
changed (Reallocsize: 56:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
(null)    0    (null)
not yet changed:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
name1    1    b
changed (Reallocsize: 84:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
(null)    0    (null)
(null)    0    (null)
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
(null)    0    (null)
name2    1    c
not yet changed:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
(null)    0    (null)
name2    1    c
changed (Reallocsize: 112:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
(null)    0    (null)
(null)    0    (null)
(null)    0    (null)
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
(null)    0    (null)
(null)    0    (null)
name3    1    d
michael[uds]$

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was jetzt noch fehlt, sind die merkwürdigen Funktionen, deren Name in 
Versalien (GROSSBUCHSTABEN) geschrieben werden, wie z.B. UDS_COLUM_SIZE.

Autor: Michael H. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei ist das Makro...

Autor: Michael H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: Eigentlich müsste das Makro so heißen:
#define UDS_COLUM_SIZE() (sizeof(uds_colums_t))

aber das ändert auch nichts an der Funktion. Der Output ist aber anders:
michael[uds]$ ./uds
This is a mainfunction for individual testing. Later it gonna be 
removed!
not yet changed:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
changed (Reallocsize: 12:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
(null)    0    (null)
not yet changed:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
changed (Reallocsize: 24:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
(null)    0    (null)
not yet changed:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
name1    1    b
changed (Reallocsize: 36:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
(null)    0    (null)
(null)    0    (null)
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
(null)    0    (null)
name2    1    c
not yet changed:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
(null)    0    (null)
name2    1    c
changed (Reallocsize: 48:
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
(null)    0    (null)
(null)    0    (null)
(null)    0    (null)
==Analizing contents of table testing==
NAME    TYPE    DEFAULT
id    1    a
(null)    0    (null)
(null)    0    (null)
name3    1    d
michael[uds]$

Autor: Michael H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
need help... plz help me...

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uds_cur_colum+=UDS_COLUM_SIZE();

Das ist gut gemeint, aber falsch. Bei Pointerarithmetik wird automatisch 
ein Vielfaches der Strukturgroesse addiert. Wenn du die Groesse nochmal 
mit rein nimmst, schreibst und liest du also irgendwo im Speicher rum, 
weit hinter deinem Speicherblock.

Autor: Michael H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wie komme ich dann auf den richtigen Speicherblock?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uds_cur_colum++;

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder einfach mal nach Pointerarithmetik suchen und das grundsaetzlich 
nachlesen. Noch besser waere ein C-Buch.

Autor: Michael H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh mein Gott, war der Fehler doof! Ich dachte, ich muss zusätzlich noch 
die size miteinrechnen...
Vielen Dank es funzt!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.