You are not logged in.

  • Login

1

Monday, June 14th 2010, 4:15pm

Zuweisung Strukturen [C]

Hallo,

was passiert eigentlich wenn ich zwei Strukturen in C habe und die eine der anderen zuweise. Also ich habe Struktur X und eine Struktur Y, und schreibe

X = Y;

gibts da irgendwelche unterschiede bei der Überweisung, irgendetwas was ich beachten muss ? Wird da intern eigentlich nur die Adresse von Y and die Adresse von X übergeben oder finden da tatsächlich Wertzuweisungen statt intern.

2

Monday, June 14th 2010, 6:39pm

Hi

er wird meckern und es nicht zulassen.

Wenn du aber 2 Instanzen einer Struktur meinst, dann wird er es ohne weiteres schlucken, weil du bei X = Y nichts anderes machst, als den Speicherpointer zu ändern. Und deine Struktur X wird frei gesetzt und später vom Garbage-Collector eingesammelt.

3

Monday, June 14th 2010, 10:30pm

gibt es denn in c einen garbage collector ;)

4

Tuesday, June 15th 2010, 7:17am

nein

thx, truespin

5

Tuesday, June 15th 2010, 11:23am

es gibt aber den von Windows, oder bin ich ganz blöd? :)

6

Tuesday, June 15th 2010, 2:35pm

jop. du verwechselst immer c und c++ und java ^^

aber nichts für ungut. wie kriege ich denn raus ob bei einer zuweisung die adresse übergeben wird. oder ob da vielleicht die einzelnen elemente der struktur nur jeweils in die neue struktur kopiert werden.

7

Wednesday, June 16th 2010, 12:37am

du könntest es einfach testen ;)
wenn du wie oben als Beispiel X = Y machst, probier danach dann einfach mal ein element von X zu ändern und schau dir dann an, wie das jeweilige element in Y und X aussieht. Ist in Y das alte, wurde die Struktur offensichtlich in X rüberkopiert. Ist in Y aber der neue Wert des Elements, dann warens wohl nur Pointer.

Aber prinzipiell ist es in C so, dass nur variablen die explizit Pointer sind, auch wirklich Pointer sind (komischer Satz ;)).
Wenn du nen Strukturtyp mit Namen strukt hast und du definierst ne Variable:

C/C++ Quellcode

1
strukt X;

Dann reserviert er im Stack nen Speicherbereich für die Struktur und X kannst du dann letztendlich auch nicht mehr ändern. Wenn du dann dem X ne andere Strukturinstanz Y zuweist kopiert er einfach nur den kompletten Inhalt in den Speicherbereich von X. Der Speicherbereich wird dann auch erst wieder frei, wenn du den aktuellen Scope verlässt und der Stack wieder reduziert wird. Solange das Zeug auf dem Stack liegt braucht man auch keinen Garbage Collector (dens ja eh nicht gibt), da der da eh nichts machen würde. Das Problem mit nicht wieder freigegebenen Speicherbereich gibts nur im Heap, aber auf Elemente die dort abgelegt sind greift man ausschließlich mit Zeigern zu.

Similar threads

Social bookmarks