Problem mit pointern

neonium

Grünschnabel
Also ich will ein Führerscheinprüfungs programm schreiben. Leider weiss ich nicht mehr weiter. Man hat mir gesagt das programm ramspeicher freigeben muss oder so.

Naja hier erstmal link zum Code http://nopaste.php-q.net/215586

Programmiere mit dev cpp leider kennt das irgendwie nich alle funktionen das programm stürzt halt immer ab.
 
Hi, willkommen bei tutorials.de!

Wenn du sagst du benutzt Dev-C++, warum schreibst du das dann ins Borland CBuilder / VCL Forum?

Bevor du den Speicher freigibst oder benutzt mußt du erstmal Speicher überhaupt vom System anfordern. Das machst du nämlich nicht, sondern du initialisierst die Variable fragen z.B. mit NULL (was ja schonmal an sich nicht schlecht ist, da es ein Pointer ist), aber du greifst dann einfach auf fragen[0], fragen[1], usw. zu. Das geht natürlich nicht denn der Zeiger zeigt ja auf nichts.

Warum verwendest du dafür denn überhaupt Zeiger, du kannst doch gleich statische Arrays anlegen:
C++:
char* fragen[30];

fragen[0] = "...";
fragen[1] = "...";
...
fragen[29] = "...";

Übrigens würde man das normalerweise nicht mit 5 Arrays realisieren sondern dazu Strukturen verwenden.

Gruß
 
ist für die schule alles muss man sich selbe beibringen :( hab davor schon für anderen morse prog geschrieben da hab ich es ähnlich funktioniert aber da ist er auch immer abgeschmiert darum hab ichs anders gemacht. Warum ichs hier poste weil ich eigentlich mit augenkrebsprogramm turbo c 3.0 programmiere. Was macht das * nach dem char. Ich weiss das sollte man mit einem array machen aber erstmal brauch ich ein lauffähiges prog optimieren kann ich das später noch.
 
Zuletzt bearbeitet:
Das Sternchen hat erstmal im Grunde nichts mit Arrays zu tun. Es bedeutet lediglich das ein Zeiger auf einen bestimmten Typ deklariert wird.

Deklarationen kann man am besten immer von rechts nach links lesen. In diesem Fall steht da: "deklariere ein Array von 30 Elementen vom Typ Zeiger auf char (namens fragen)".

Das da ein Array deklariert wird siehst du an den eckigen Klammern und der Angabe der Anzahl der Elemente.

Ein Zeiger auf char ist etwas besonderes in C da man damit einen String deklariert. Man kann also auch sagen es wird ein Array von 30 Elementen von Strings vereinbart. Und das ist ja im Grunde genau das was du brauchst.

Ich habe übrigens noch kein Wort von Optimierung gesagt. Wenn du das mit einem dynamischen Array machen willst so wie du es angefangen hast mußt du zusätzlich erstmal den Speicher reservieren und danach wieder freigeben:
C:
char** fragen = NULL;

fragen = calloc(30, sizeof(char*));
if (fragen == NULL) {
  // Fehler: konnte Speicher nicht reservieren...
  return 1;
}
fragen[0] = "...";
...
// zum Schluss wieder freigeben:
free(fragen);
Aber ich würde sagen, das das für den Anfang noch etwas schwierig ist. Das kannst du ja für dich selbst entscheiden ob die lieber ein statisches Array nimmst (wo der Compiler automatisch dafür sorgt das es angelegt und wieder aufgeräumt wird) oder ein dynamisches Array vorziehst.

Die Deklaration von fragen bedeutet übrigens: "deklariere eine Variable vom Typ Zeiger auf Zeiger auf char (namens fragen)".

Gruß
 
@neomium: Groß- und Kleinschreibung und Satzzeichen tragen erheblich zum Verständnis eines Textes bei.
 
Ja ok. Ich schreib jetzt mal ordentlich. Also ich habe das ganze zeit mal angepasst.
hier http://nopaste.php-q.net/215996 des Codes, aber irgendwie funktioniert das nicht. Er geht aber irgendwie nicht aus der schleife von zeile 342 raus.

Er generiert immer wieder fragen. Obwohl er eigentlich nur soviele fragen ausgeben soll, wie ich vorher angegeben hab.(
 
Zuletzt bearbeitet:
neonium hat gesagt.:
Ja ok. Ich schreib jetzt mal ordentlich.
Hm...
neonium hat gesagt.:
Also ich habe das ganze zeit mal angepasst.
hier http://nopaste.php-q.net/215996 der Code, aber irgendwie funktioniert das nicht. Er geht aber irgendwie nicht aus der schleiche für 342 raus. Er generiert immer wieder fragen. Obwohl er eigentlich nur soviele fragen ausgeben soll, wie ich vorher angegeben hab.
Ja ok. Jetzt komm ich mir verarscht vor. Pass auf das ich dich nicht kaputt lache.

Überarbeite doch deinen Beitrag einfach nochmal im Hinblick auf Rechtschreibung und semantischen Inhalt. Was meinst du mit 342?

Gruß

PS: Du mußt an scanf Adressen übergeben:
C:
scanf("%i",&i);
 
Zurück