C Anfänger - Xcode Problem mit Speicher??
C Anfänger - Xcode Problem mit Speicher??
Hallo
ich habe ein kleines Testprogramm geschrieben um ein wenig den Umgang mit Arrays und Strukturen zu üben.
Natürlich klappt das nicht so wie ich will
auf den Bilschirmfotos kann man erkennen das sobald "i" in der "for"-schleife den Wert 4 hat es zu einer Fehlermeldung kommt...
Verstehe allerdings nicht warum, denn wenn ich "i" in der "for"-schleife mit 10 initialisiere dann läuft das ganze ohne probleme durch
und im oberen bild sieht man was passiert wenn ich die schleife mit 5 initialisiere... (Output fenster rehts unten)
und das ergibt für mich erst recht keinen sinn?????
hat jemand eine erklärung dafür??
ich habe ein kleines Testprogramm geschrieben um ein wenig den Umgang mit Arrays und Strukturen zu üben.
Natürlich klappt das nicht so wie ich will
auf den Bilschirmfotos kann man erkennen das sobald "i" in der "for"-schleife den Wert 4 hat es zu einer Fehlermeldung kommt...
Verstehe allerdings nicht warum, denn wenn ich "i" in der "for"-schleife mit 10 initialisiere dann läuft das ganze ohne probleme durch
und im oberen bild sieht man was passiert wenn ich die schleife mit 5 initialisiere... (Output fenster rehts unten)
und das ergibt für mich erst recht keinen sinn?????
hat jemand eine erklärung dafür??
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: C Anfänger - Xcode Problem mit Speicher??
Das Problem liegt an einer anderen Stelle:auf den Bilschirmfotos kann man erkennen das sobald "i" in der "for"-schleife den Wert 4 hat es zu einer Fehlermeldung kommt...
Code: Alles auswählen
unsigned int i = 0;
struct Werte values[i];
Dann greifst du bei einem Array mit 0 Elementen auf ein Element größer 0 zu, was dazu führt, dass du irgendwo in deinem Arbeitsspeicher werte änderst und dass führt zu den Problemen.
Ein Array ist eine Aneinanderreihung der Variablen/Strukturen mit denen du das Array anlegst. Bedeutet, legst du ein int array an:
Code: Alles auswählen
int array[5];
Wenn du nun auf
Code: Alles auswählen
array[2]
Was passiert hast du ja bemerkt. Du liest über die Grenzen deines Arrays hinweg im Speicher und da kann nun alles mögliche stehen. Du veränderst nun diesen inhalt, von dem du nicht weist wozu er gehört und dass kann dazu führen, dass dein Programm abschmiert.
Was du also machen musst, ist dein Array mit einer gewissen Zahl an Elementen zu initialisieren:
Code: Alles auswählen
struct Werte values[10]; //Ein Array mit 10 Elementen
Was auch zu beachten ist, ist die Tatsache das Arrays statisch sind. Du musst vor dem Compilieren angeben, wie groß sie sein sollen. Willst du dynamisch Elemente hinzufügen, musst du dir Datenstrukturen wie Listen anschauen, das erfordert dann aber gutes Verständnis von Pointern.
Mit freundlichen Grüßen
cloidnerux
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
Re: C Anfänger - Xcode Problem mit Speicher??
aahhh ja da merkt man wieder diese unerfahrenheit... das problem war nur die falsche definiton
Super vielen Dank!
aber was ich auch nicht verstehe ist das er beim initialiesieren in der schleife i=5... im Output dann 5,0,1,2,3 ausgegeben hat (den fehler macht er jetzt aber auch nichtmehr)
das hat er beim intialisieren mit i=10 nicht gemacht, da hat er normal ab 10,11,12... hochgezählt?
Super vielen Dank!
aber was ich auch nicht verstehe ist das er beim initialiesieren in der schleife i=5... im Output dann 5,0,1,2,3 ausgegeben hat (den fehler macht er jetzt aber auch nichtmehr)
das hat er beim intialisieren mit i=10 nicht gemacht, da hat er normal ab 10,11,12... hochgezählt?
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: C Anfänger - Xcode Problem mit Speicher??
Wahrscheinlich war i an der Stelle im Speicher woaber was ich auch nicht verstehe ist das er beim initialiesieren in der schleife i=5... im Output dann 5,0,1,2,3 ausgegeben hat (den fehler macht er jetzt aber auch nichtmehr)
Code: Alles auswählen
values[6].value1
Code: Alles auswählen
calues[6].value2
Damit hättest du eine Endlosschleife gebaut, die immer bis 5 hochzählt und sich dann selber zurücksetzt.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
Re: C Anfänger - Xcode Problem mit Speicher??
aha ok das leuchtet ein.
ist das überhaupt der richtige weg alle werte der struktur im array zu nullen?
ist das überhaupt der richtige weg alle werte der struktur im array zu nullen?
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: C Anfänger - Xcode Problem mit Speicher??
Er ist nicht falsch, man kann es aber einfacher machen.ist das überhaupt der richtige weg alle werte der struktur im array zu nullen?
Zum einen ist zu überlegen, ob du nicht an anderer Stelle deinen structs Werte zuweist, das Nullen also überflüssig ist.
Du kannst aber auch mit "memset" einen ganzen Speicherbereich auf einen bestimmten Wert setzten:
Code: Alles auswählen
memset(values, 0, sizeof(values)*ARRAY_LENGTH);
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
Re: C Anfänger - Xcode Problem mit Speicher??
Wenn du die Initialisierung direkt beim Anlegen des Arrays aus Strukturen vornehmen willst, kannst du das auch so machen:
Als Ausgabe bekommst du:
Lässt du die Zuweisung weg, wirst du irgendwelche "zufälligen" Werte rausbekommen, eben was grad an dieser Stelle im Speicher steht.
Code: Alles auswählen
#include <stdio.h>
#define SIZE 5
struct DummyStruct
{
int a;
char b;
};
int main()
{
struct DummyStruct s[SIZE] = { { 0 } };
int i;
for( i = 0; i < SIZE; i++ )
printf( "%d: %d %d\n", i, s[i].a, s[i].b );
return 0;
}
Code: Alles auswählen
0: 0 0
1: 0 0
2: 0 0
3: 0 0
4: 0 0