Programm mit Abruffunktionen,Pointern und Arrays.Seltsame Fehlermeldung

DIE Zeile würde ich doch mal rausnehmen!
Und wie genau kommst du darauf?
Das ist ein 2-Dimensionaler Array. Es wird malloc() benutzt, also muss free() benutzt werden.

@Baqk10
Dein Problem habe ich schon x-Mal erwähnt:
C:
//prototyp
void spielGeruest(char **spielfeld);

//...
char** spielfeld;
//Aufruf
spielGeruest(**spielfeld); //DAS IST FALSCH! Du übergibst **spielfeld, wessen Typ char (nicht char**) ist. Daher auch der Syntaxfehler

Es lässt sich compilieren, stürzt aber ab.
Ganz sicher nicht. (Type violation)

Hab ich, lässt sich compilieren, stürzt leider immernoch ab.
Wieder: Nö. Nicht mit deinem Code von oben. Dann hast du was anderes verändert.

Nimm endlich die 2 Sterne vor dem spielfeld im Aufruf weg. Es ist und bleibt falsch.

Hier ein Tipp: Stelle den Compiler auf -Wall (Warn all) um. Du wirst jetzt schon einige davon haben... Warnungen sind nicht nette Grüsse vom Compiler, sie sagen, dass dein Code höchstwahrscheinlich falsch ist.

Gruss
cwriter
 
Und wie genau kommst du darauf?
Das ist ein 2-Dimensionaler Array. Es wird malloc() benutzt, also muss free() benutzt werden.



Wieder: Nö. Nicht mit deinem Code von oben. Dann hast du was anderes verändert.

Nimm endlich die 2 Sterne vor dem spielfeld im Aufruf weg. Es ist und bleibt falsch.

Hier ein Tipp: Stelle den Compiler auf -Wall (Warn all) um. Du wirst jetzt schon einige davon haben... Warnungen sind nicht nette Grüsse vom Compiler, sie sagen, dass dein Code höchstwahrscheinlich falsch ist.

Gruss
cwriter
Ich hab die Sterne jetzt weggemacht, hab dich davor wohl nicht verstanden :D
aber dennoch, das Programm stürzt ab.
Hab zur Sicherheit nochmal den Code gelöscht und den genommen den du für richtig erklärt hast eben ohne die Sterne im Aufruf.
Es stürzt ab ...
 
Dann brauche ich wieder den kompletten aktuellen Code.

Warnt dein Compiler?

Gruss
cwriter
Ne er warnt nicht, stürzt einfach ab nach dem compilieren.

Hier der Code :
C:
#include <stdio.h>
#include <stdlib.h>

#define GROESSE_FELD 4
#define DIM_ZEILE GROESSE_FELD * 2 + 1
#define DIM_SPALTE GROESSE_FELD * 2 + 1



void spielGeruest(char **spielfeld){
    int i = 0, j = 0;
for(i = 0; i < (DIM_ZEILE); i++){
for(j = 0; j < (DIM_SPALTE); j++){
            if(!(i%2)){
                if(!(j%2)){
                    spielfeld[i][j] = '|';
                }
                else{
                    spielfeld[i][j] = '-';
                }
            }
            else{
                if(!(j%2)){
                    spielfeld[i][j] = '|';
                }
                else{
                    spielfeld[i][j] = 'x';
                }
            }
        }
    }
}
void ausgabeSpielfeld(char** spielfeld){
    int i, j;
    for(i=0; i<(DIM_ZEILE); i++){
      for(j=0; j<(DIM_SPALTE); j++){
           printf("Spielfeld[%d][%d]\n", spielfeld[i][j]);
           return spielfeld[i][j];
    }
    }
}
    int main(){
        int i;

    int array[DIM_SPALTE][DIM_ZEILE]={0};            //Zweidimensionales Array
    char **spielfeld;
    spielfeld = (char**)malloc(sizeof(char*)*(DIM_ZEILE));
        for(i=0;i<(DIM_SPALTE);i++);{
            spielfeld[i] = (char*)malloc(sizeof(char)*DIM_SPALTE);
        }

        spielGeruest(spielfeld);
        ausgabeSpielfeld(spielfeld);
        for(i = 0; i < DIM_ZEILE; i++)free(spielfeld[i]);
        free(spielfeld);
    return 0;
    }
 
Zeile 37 ist das printf falsch: 2 %d vs 1 char Input.

Zeile 48 ist das Semikolon nach dem for falsch, der Code in { } wird nicht ausgeführt.

Dein int array wird nicht benutzt.

Und lügst du eigentlich?
Ne er warnt nicht, stürzt einfach ab nach dem compilieren.
Du versuchst, in einer void-Funktion einen Wert zurückzugeben.
(ausgabeSpielfeld)
D.h. du müsstest einen Error bekommen.
(Das ist kein Compilerabsturz).

Das Programm sollte gar nicht erst laufen (wenn etwas läuft, dann nur ein veraltetes Kompilat).

Gruss
cwriter
 
Zeile 37 ist das printf falsch: 2 %d vs 1 char Input.

Zeile 48 ist das Semikolon nach dem for falsch, der Code in { } wird nicht ausgeführt.

Dein int array wird nicht benutzt.

Und lügst du eigentlich?

Du versuchst, in einer void-Funktion einen Wert zurückzugeben.
(ausgabeSpielfeld)
D.h. du müsstest einen Error bekommen.
(Das ist kein Compilerabsturz).

Das Programm sollte gar nicht erst laufen (wenn etwas läuft, dann nur ein veraltetes Kompilat).

Gruss
cwriter

Wieso sollte ich lügen? Es ist ganz sicher nicht mein Hobby die Zeit anderer Leute und meine zu verschwenden .
SO wie ich den gepostet habe steht er im Compiler, ich compiliere das Programm startet und dann stürzt es ab.
Ich habe keinen Grund was anderes zu sagen, ich schätze deine Hilfe wirklich.

Den Zurückgabeversuch in der void FUnktion habe ich weggemacht, es stürzt immernoch ab.Es gibt , build ; run und "build and rund" ich benutze letzteres.
Ist ganz sicher kein altes Compilat
 
Lösche mal die exe aus dem Ordner und kompiliere nochmals...
(Die Commandline sollte im Titel stehen haben, wo sich die exe befindet).
Drücke mal nur "Build". "Build and Run" kann je nach Einstellung einfach das Ergebnis des letzten erfolgreichen Buildvorgangs ausführen.

Ist ganz sicher kein altes Compilat
Wie kommst du darauf? Ich bin ganz sicher, dass es kein neues ist, da der Code Syntaxfehler aufwies. Ob es jetzt gehen sollte: Dunno.

Ein einfacher Test: Füge am Beginn in der main ein printf("Version 2\n"); (oder ähnlich) ein. Wird das ausgegeben? Wenn nein, dann ist der Code alt.

Gruss
cwriter
 
Hier ein Beweis, hab genau gemacht was du gesagt hast.
Stürzt ab , ist der gleiche Code , nur die Rückgabe im void ausgabe ist weggemacht
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    22,7 KB · Aufrufe: 2
Zurück