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


Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...