Gamestudio Links
Zorro Links
Newest Posts
AlpacaZorroPlugin v1.3.0 Released
by kzhao. 05/20/24 01:28
Free Live Data for Zorro with Paper Trading?
by AbrahamR. 05/18/24 13:28
Change chart colours
by 7th_zorro. 05/11/24 09:25
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
2 registered members (AndrewAMD, Ayumi), 838 guests, and 2 spiders.
Key: Admin, Global Mod, Mod
Newest Members
Hanky27, firatv, wandaluciaia, Mega_Rod, EternallyCurious
19051 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Frage zu structs / question about structs #410452
11/03/12 11:00
11/03/12 11:00
Joined: Mar 2012
Posts: 44
A
Abarudra Offline OP
Newbie
Abarudra  Offline OP
Newbie
A

Joined: Mar 2012
Posts: 44
Hallo community,

ich bin bei meinem Projekt mal wieder auf ein Problem gestoßen, wobei ich eure Hilfe benötige. Ich möchte ein Array in einem struct mit variabler Größe haben. Es geht um folgendes Beispiel.
i have reached a point in my project where i need your help. I have a struct FAHRZEUG which contains an array of another struct, but i dont know the dimension when i create it. Here is an example

Code:
typedef struct 
{	
  int typ;
} REIFEN;

typedef struct 
{	
   int anzahl;        // kann je nach Fahrzeugtyp zwischen 2-10 liegen
                      // "anzahl" can have values between 2 and 10
   REIFEN test[x];    // x soll wenn möglich abhängig von "anzahl" sein
                      // "x" should be related to "anzahl" if possible
} FAHRZEUG;

FAHRZEUG f1;



Mein Gedanke war jetzt das ich wenn ich "x" pauschal auf den größtmöglichen Wert setze (z.B 10) ich Platz / Speicher verschwende. Richtig oder Falsch?
Will i waste memory if i set x to the highest possible number (e.g 10), although i mainly need 2,4 and 6 for x?

Ich hab dann durch Tests herausgefunden, dass für "x = 2" f1.test[4].typ = 99; funktioniert, obwohl ich die Dimension von test überschreite.
I found out that this is working although it shouldn`t.
var test_array[5];
test_array[7] = 10;


Mit folgender Funktion wollte ich dann genügend Speicher bereitstellen.
I have then tried to include this function to allocate enough memory.
Code:
typedef struct 
{	
  int typ;
} REIFEN;

typedef struct 
{	
   int anzahl;        
   REIFEN test[0]; 
	
} FAHRZEUG;

FAHRZEUG f1;
function setup_reifen(FAHRZEUG* f)
{
	&f.test = sys_malloc(sizeof(REIFEN)*f.anzahl);	
}

f1.anzahl = 4;
setup_reifen(f1);
f1.test[3] = 5;


Auch das läuftn ohne Fehler. Ich möchte nur gerne Wissen, ob der Ansatz überhaupt korrekt ist, oder ob ich mir unbewusst so den ganzen Speicher schrotte.
Im still getting no error but i don`t know if this is even correct. Will this corrupt my memory?

Ich hoffe das ich mein Anliegen einigermaßen erkären konnte und bin für jede Hilfe dankbar.
I hope you can understand my question. I`m thankful for any help and sorry for my bad english.

MFG

Re: Frage zu structs / question about structs [Re: Abarudra] #410473
11/03/12 15:31
11/03/12 15:31
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline
Senior Expert
Superku  Offline
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Quote:
Ich hab dann durch Tests herausgefunden, dass für "x = 2" f1.test[4].typ = 99; funktioniert, obwohl ich die Dimension von test überschreite.

Da überschreibst du einfach den Speicher hinter deinem Testarray, und der kann bereits von sonstwelchen Objekten belegt sein.

sys_malloc ist der richtige Ansatz, nur schreibt man normalerweise in seinen Struct einen Pointer, sprich "REIFEN* test;" sollte es heißen, und in diesem speicherst du dann in der Funktion setup_reifen wie gehabt die Adresse zum Speicherblock ab.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: Frage zu structs / question about structs [Re: Superku] #410475
11/03/12 15:46
11/03/12 15:46
Joined: Mar 2012
Posts: 44
A
Abarudra Offline OP
Newbie
Abarudra  Offline OP
Newbie
A

Joined: Mar 2012
Posts: 44
Vielen Dank für die Info Superku.

Ich werde dann mal weiter mit sys_malloc testen.

Ich habe das Struct "Reifen" nicht als Pointer drin, da ich mir dachte so ist es eindeutig dann diesem "Oberstruct" zugewiesen und kann nicht gleichzeitig in einem anderen auftauchen. Ich hab mir mein "Wissen" über structs aus den AUMs zusammengereimt und da steht es in einem Beispiel auch ohne "*" drinn.

Kann ich das so beibehalten oder würde ich dadurch später Probleme bekommen?

Hintergrund ist der das die Structe Spielerbezogen sind (z.B Individuelle Beamlung des Fahrzeugs, o.ä), sprich:

- beim ersten Spielstart wird ein neues Struct aus einer Vorlage erstellt
- die Informationen können durch den Spieler geändert werden
- werden dann später zur Sicherung in eine externe Datei geschrieben
- beim nächsten Start wird dann kein neues struct erstellt, sondern das "persönliche" / modifizierte eingelesen.

Re: Frage zu structs / question about structs [Re: Abarudra] #410477
11/03/12 16:12
11/03/12 16:12
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline
Senior Expert
Superku  Offline
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Du definierst den Pointer ja nicht global, sondern als potentielles Element einer Struktinstanz, sprich wenn du bspw.
FAHRZEUG f1;
FAHRZEUG f2;
(global) definierst, wird automatisch Speicher für die Elemente von f1 und f2 reserviert, unabhängig davon, ob die nun Pointer, Integer oder sonstetwas sind. Damit können also die Pointer f1.test und f2.test auf vollkommen unterschiedliche Bereiche zeigen, sie sind in keiner Weise verknüpft.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: Frage zu structs / question about structs [Re: Superku] #410479
11/03/12 17:10
11/03/12 17:10
Joined: Mar 2012
Posts: 44
A
Abarudra Offline OP
Newbie
Abarudra  Offline OP
Newbie
A

Joined: Mar 2012
Posts: 44
Alles klar. Dann werde ich das so beherzigen.


Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1