Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

hallo,

jetz hab ich noch ein problem und zwar:

ich definiere mir ein 2d-array am anfang des programms folgendermaßen:


int chain_pos[1][2];

das heißt es gibt chain_pos[0][0] und chain_pos[0][1]

soweit, sogut...

nun möchte ich im programm das array verlängern....

wenn sich also

(int) mampf_pos um eines erhöht soll es ein weiteres feld geben...als wenn jetz mampf_pos um eins erhöht wird, soll es

chain_pos[1][0] und chain_pos[1][1] geben

und wenn mampf_pos wieder eines mehr ist

chain_pos[2][0] und chain_pos[2][1]

wie mach ich das?

Geschrieben

C oder C++?

Ich würde das gar nicht als zweidimensionales Array machen, sondern als eindimensionales Array einer Struktur mit zwei int-Membern. Denn so wie es aussieht, ändert sich die Größe der zweiten Dimension ja nicht.

Ein eindimensionales Array kannst du, wie es mit dynamischen Arrays üblich ist, vergrößern (realloc in C, new und umkopieren in C++ - oder besser gleich std::vector).

Geschrieben

in C.

stimmt die zweite dimension endert sich nicht!

ok dann mach ich es mit einer struktur und einem eindimensionalen array....

danke für die antwort!

und das vergrößern mit realloc war mir schon klar aber das ich blos die 1.dim. vergrößern wollt war der auslöser des problem...aber danke!

Geschrieben

hallo, jetz bin ichs nochmal...wie soll ich das jetzt genau machn....

ich hab jetz meine struktur

struct  typ_sch { 

    int x;

	int y;

  } chain_pos[1];
nun füll ich das erste array-struktur-feld:

chain_pos[mampf_zaehler].x = mampf_pos[0];

chain_pos[mampf_zaehler].x = mampf_pos[1];

nun muss ich mit realloc chain_pos um eines vergrößern jetz hab ich

chain_pos = (int *)realloc(chain_pos,(mampf_zaehler+1));

wenn ich es so mache bekomme ich immer den compiler-fehler:

left operand must be modifiable lvalue: op "="

an was liegt das, oder wie mach es richtig(wie du es meintest)?

Geschrieben

Du kannst ein festes Array nicht vergrößern oder verkleinern.

Wenn du die Größe zur Laufzeit ändern willst musst du dir auch zur Laufzeit Speicher reservieren (in C mit malloc oder calloc) und einem entsprechenden Zeiger darauf verweisen lassen.

Diesen kannst du dann nach belieben vergrößern.

Geschrieben


  struct  typ_sch { 

    int x;

	int y;

  } chain_pos;


  chain_pos =  malloc(1*sizeof(int));

wenn ich es jetz nun so mache bekomme ich

"sn.c", line 88: assignment type mismatch:

        struct typ_sch {int x, int y} "=" pointer to void

"sn.c", line 115: operands have incompatible types:

         struct typ_sch {int x, int y} "+" int

"sn.c", line 115: cannot dereference non-pointer type

"sn.c", line 116: operands have incompatible types:

         struct typ_sch {int x, int y} "+" int

"sn.c", line 116: cannot dereference non-pointer type


Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...