Programm mit Abruffunktionen,Pointern und Arrays.Seltsame Fehlermeldung

Wo würdest du es hinsetzen, nachdem ich dir gesagt habe, dass kein Speicherzugriff auf den Pointer nach dem free() (aber natürlich davor) und kein Zugriff vor (aber nach) malloc() sein darf?


Gruss
cwriter
Wenn nach dem free() kein Speicherzugriff sein soll, und vor dem maloc nicht, dann würde ich den Code den du willst zur Zeile 51. machen(Falls ich nichts löschen soll)
 
Speicherberechnung? Du berechnest im Moment nichts, du verwendest Konstanten.
Es geht um die Speicherzugriffe - malloc() kann zwar fehlschlagen, aber bei einigermassen sinnvollen Grössen (< 100MB) passiert das nur, wenn dein Computer wenig RAM (übrig) hat.

Und jetzt bin ich mal so frech und ändere eines der Defines, da ich ein nicht-quadratisches Rechteck haben will. Du erlaubst ja 2 unterschiedliche Werte, ansonsten müsstest du ja nur eine Seitenlänge definieren.


cwriter

An meinem Notebook kanns net liegen der ist ganz aktuell :D.
Aber für die Unterfunktion des Gerüsts, sind diese ja Definiert, also ist das Gerüst ja schon Quadratisch (Zeile und Spalte sind gleich)
Desweiteren will ich diese gar nicht ändern, sie sollen eben in den for Schleifen dafür sorgen, das der Platz nicht übergetreten wird.
Daher auch das zweidimensionale Array
 
Wenn nach dem free() kein Speicherzugriff sein soll, und vor dem maloc nicht, dann würde ich den Code, den du willst den ich will, da ich ja kein leckendes Programm haben möchte, zur Zeile 51. machen

Also so?
C:
for(size_t i = 0; i < DIM_ZEILE; i++) free(spielfeld[i]);
free(spielfeld);
spielGeruest(**spielfeld);
ausgabeSpielfeld(**spielfeld,array);
return 0;
Falls du meinst, dass die Zeilen zwischen dem free() und dem return nicht auf spielfeld zugreifen, dann klar. Läuft es denn?

(Falls ich nichts löschen soll)
Du solltest meine Beiträge lesen, verstehen und erst dann etwas am Code ändern. Wäre zumindest mein Vorschlag. Ich bilde mir zumindest ein, programmieren zu können; falls du also den Code vorgekaut bekommen willst... Aber das will ich dir nicht antun, denn dann lernst du nicht wirklich, wie der Code funktioniert.

An meinem Notebook kanns net liegen der ist ganz aktuell :D.
Auch neue Autos kann man überladen. Aber ich stimme dir dahingehend zu, dass es nicht an der Hardware liegen sollte.

Aber für die Unterfunktion des Gerüsts, sind diese ja Definiert, also ist das Gerüst ja schon Quadratisch (Zeile und Spalte sind gleich)
Die Funktion erlaubt auch rechteckige Matrizen. Hier ist es einfach ein Spezialfall, dass es eine n*n-Matrix ist.

Desweiteren will ich diese gar nicht ändern, sie sollen eben in den for Schleifen dafür sorgen, das der Platz nicht übergetreten wird.
Und was genau liest du dann ein?

Daher auch das zweidimensionale Array
Ich verstehe hier die Kausalität nicht so ganz.

Gruss
cwriter
 
Naja das Problem ist einfach, das dieses Gebiet völliges Neuland für mich ist, ich kann es gar nicht können.
Hatte dazu noch keine Vorlesung oder Ähnliches.
Die Praktika sind alle den Vorlesungen voraus, ich hab nur das was ich im I- Net erlesen kann.
Also so?
C:
for(size_t i = 0; i < DIM_ZEILE; i++) free(spielfeld[i]);
free(spielfeld);
spielGeruest(**spielfeld);
ausgabeSpielfeld(**spielfeld,array);
return 0;
Falls du meinst, dass die Zeilen zwischen dem free() und dem return nicht auf spielfeld zugreifen, dann klar. Läuft es denn?

Du solltest meine Beiträge lesen, verstehen und erst dann etwas am Code ändern. Wäre zumindest mein Vorschlag. Ich bilde mir zumindest ein, programmieren zu können; falls du also den Code vorgekaut bekommen willst... Aber das will ich dir nicht antun, denn dann lernst du nicht wirklich, wie der Code funktioniert.

Ich verstehe hier die Kausalität nicht so ganz.

Gruss
cwriter

Das scanf für i hab ich gelöscht, es war unnötig hast Recht :D.
Ja so wie du es beschrieben hast hab ich es gemacht, funzt aber leider nicht.
Ich lese sie doppelt und dreifach :D, das Problem ist ich kann nur nacheinander alle Fehlermeldungen abarbeiten da ich keinen Plan habe wie ich es hinkriegen soll, das das Gerüst ausgegeben werden soll.
 
Naja das Problem ist einfach, das dieses Gebiet völliges Neuland für mich ist, ich kann es gar nicht können.
Mag sein. Daher habe ich alles, was du brauchst, auch geschrieben.
Hatte dazu noch keine Vorlesung oder Ähnliches.
Die Praktika sind alle den Vorlesungen voraus, ich hab nur das was ich im I- Net erlesen kann.
Und in den Praktika sagen sie dir nicht, wie es funktioniert?

Ja so wie du es beschrieben hast hab ich es gemacht, funzt aber leider nicht.
Soll ich deutlicher werden? Du greifst bei **spielfeld auf den ge-free-ten Pointer zu -> das Programm wird abgeschossen.
Das vorhin war Ironie. Der Code, den ich nach dem "Also so?" geschrieben habe, ist falsch. (Es wird nach dem free() weiter darauf zugegriffen).

Ich lese sie doppelt und dreifach :D
Und verstehst du sie denn auch?

das Problem ist ich kann nur nacheinander alle Fehlermeldungen abarbeiten da ich keinen Plan habe wie ich es hinkriegen soll, das das Gerüst ausgegeben werden soll.
Welche Fehlermeldungen?

Gruss
cwriter
 
Ja ich hab es nun woanders hingetan, direkt vor return0; also wenn das Programm fast beendet ist.
Mag sein. Daher habe ich alles, was du brauchst, auch geschrieben.

Und in den Praktika sagen sie dir nicht, wie es funktioniert?

Und verstehst du sie denn auch?


Welche Fehlermeldungen?

Gruss
cwriter
Nein , beim Praktikum schicken Sie 2 Wochen vorher die Aufgaben und dann müssen wir Sie fertig abgeben.
Dieses free() verstehe ich tatsächlich nicht aber ich strenge mich an und nun sollte es richtig sein, woanders kann ich es ja nicht hinsetzen als vor dem return0;
 
Beide free()s? Also auch den Loop?
Wenn ja: Geht doch.
Funktioniert es denn jetzt auch?

Gruss
cwriter
Ja hab es so gemacht, hab auch noch ein Wenig mehr verändert beim Aufruf der Funktion.Bei der Zeile mit dem Loop beschwert er sich über i und behauptet "conflicting types for i"(Hatte es auch vor dem & im Funktionsaufruf, mit dieser Variante mit den free()´s versucht, gleiches Problem hatte ich auch dabei.)
Hier der Code :

PHP:
        spielGeruest(&**spielfeld);
        ausgabeSpielfeld(&**spielfeld);
        for(size_t i = 0; i < DIM_ZEILE; i++)free(spielfeld[i]);
        free(spielfeld);
    return 0;
ich hab auch gelesen, dass die Unterfunktion die mit void nichts an das Hauptprogramm zurück gibt, sollte ich dort ein return spielfeld
; einbauen, am Ende ?
 
Danke vfl_freak, aber die Erklärung verstehe ich und wo ich es hinsetzen muss mittlerweile auch, mein Problem ist mit dem
PHP:
for(size_t i = 0; i < DIM_ZEILE; i++)free(spielfeld[I][i]);
ich würde dort ja zumindest
PHP:
for(size_t i = 0; i < DIM_ZEILE; i++){
free(spielfeld[i]);
}
draus machen, aber das ergibt leider auch eine Fehlermeldung.
 
Zurück