Speicherzugriffsfehler bei Speicherzuordnung eines 2d arrays



  • lin123 schrieb:

    Der inhalt der funktion store_csv ist ein noch nicht verprobter Versuch. Zu der Verprobung bin ich noch nicht gekommen weil meiner meinung nach der Programm schon bei der Speicherzuordnung abstürzt...

    Hast du das denn mittels Debugger (nix printf!) validiert?



  • lin123 schrieb:

    Der inhalt der funktion store_csv ist ein noch nicht verprobter Versuch. Zu der Verprobung bin ich noch nicht gekommen weil meiner meinung nach der Programm schon bei der Speicherzuordnung abstürzt...

    Sind aber viele langjährig erprobte und bewährte Absturzfehler drin. Und auch ein paar sinnlose Konstrukte.
    Was die Speicherzuordnung betrifft: in 0 Byte Speicher gehen exakt 0 Byte Daten rein.



  • verpr0ber schrieb:

    lin123 schrieb:

    Der inhalt der funktion store_csv ist ein noch nicht verprobter Versuch. Zu der Verprobung bin ich noch nicht gekommen weil meiner meinung nach der Programm schon bei der Speicherzuordnung abstürzt...

    Sind aber viele langjährig erprobte und bewährte Absturzfehler drin. Und auch ein paar sinnlose Konstrukte.
    Was die Speicherzuordnung betrifft: in 0 Byte Speicher gehen exakt 0 Byte Daten rein.

    Oh je, könnte natürlich sein... Kommt aber immer noch drauf an, was check_csv macht.



  • @Matze
    zeile und spalte verlassen nicht den gültigen Bereich: wenn ich in den while Schleifen ein Kriterium setzte welches zeile und spalte begrenzt, kommt es auch zu dem Fehler.
    ja, wert2 bringt hier nix.
    Ich schreibe mein Programm im Editor und Kompiliere es in der Konsole, da ist man zwecks Debugging ein wenig begrenzt!! wenn ich wirklich nicht weiter muss ich das wohl ändern.
    @verpr0ber
    ja, kann schon sein! ich bin Anfänger! vielleicht sagst du mir einfach was ich ändern muss!



  • lin123 schrieb:

    ja, wert2 bringt hier nix.
    Ich schreibe mein Programm im Editor und Kompiliere es in der Konsole, da ist man zwecks Debugging ein wenig begrenzt!! wenn ich wirklich nicht weiter muss ich das wohl ändern.

    Oh, das solltest du ändern! Unterschätze nicht die Möglichkeiten einer ordentlichen IDE. Lad dir einfach irgendeine kostenlose runter.

    lin123 schrieb:

    @verpr0ber
    ja, kann schon sein! ich bin Anfänger! vielleicht sagst du mir einfach was ich ändern muss!

    Er meint das hier:

    int check[3]={0,0,0};
    
    check_csv (check, dateiname);
    
    int Zeilen, Spalten;
    Zeilen = check[0];
    Spalten = check[1]*check[2];
    

    Du überprüfst nicht, ob nach check_csv wirklich was anderes als 0 in dem Array drinsteht. Lass dir mal das check-Array ausgeben.



  • in der funktion werden die Werte check[] berechnet, das funktionniert auch.

    kann es sein dass der speicherzugriffsfehler auf den Kompiler zurückzuführen ist?



  • lin123 schrieb:

    in der funktion werden die Werte check[] berechnet, das funktionniert auch.

    Woher weißt du das? Hast du dir die Werte nach check_csv mal ausgeben lassen?

    EDIT: Übrigens ist es in jedem Fall sinnvoll, nochmal zu prüfen, ob auch wirklich alles klargegangen ist. Erst recht, wenn man mit Dateien arbeitet. Was machst du, wenn die Datei mal nicht da ist? Du kannst einfach die Rückgabe von calloc auf NULL prüfen.

    lin123 schrieb:

    kann es sein dass der speicherzugriffsfehler auf den Kompiler zurückzuführen ist?

    Bestimmt nicht.



  • OK.... der Fehler kommt doch aus der Funktion store_csv!



  • lin123 schrieb:

    OK.... der Fehler kommt doch aus der Funktion store_csv!

    Genauer?



  • Es wird schon früher geprüft ob die datei vorhanden ist.
    Wenn nicht, kann dieser Teil des codes nicht ausgeführt werden. Die Werte von check[] werden ausgegeben. Das passt!

    ich vermute den Feheler jetzt bei dem getline...
    Ich möchte eine riesen CSV datei in den Arbeitsspeicher laden in Form von diesem 2darray. Es gibt bestimmt bessere Möglichkeiten als meine hierfür!

    ich mach mal weiter! und Vielen dank für eure Beiträge!

    Gruß,
    Lin



  • lin123 schrieb:

    Es gibt bestimmt bessere Möglichkeiten als meine hierfür!

    ja, ein '2d array' mit nur einem zeiger.



  • Es funzt noch nicht ganz! 🙂
    Hier erst mal mein Code

    Zeilen=1008;
    Spalten=69;
    int i,j;
    
        static int **csv_array = NULL; 
    
        csv_array = (int **)calloc(Zeilen,sizeof(int*)); 
        for(i = 0; i < Zeilen; i++){ 
            csv_array[i] = (int*)calloc(Spalten,sizeof(int)); 
            for (j = 0; j< Spalten; j++){  // nicht notwendig oder?
            csv_array[i][j]=0;
           }
        } 
    	printf ("\n(test)array[0][0]=:%i ",csv_array[0][0]);
    	printf ("\n(test)array[1007][68]=:%i ",csv_array[1007][68]);
    

    in den letzten printf kommandos will ich nur testen ob es klappt. Mit den eingetragenen Werten geht es auch. Jetzt zu dem was ich nicht verstehe:

    printf ("\n(test)array[1008][68]=:%i ",csv_array[1008][68]);
    

    Hier kommt ein Speicherzugriffsfehler, normal! 1008 Zeilen gehen von [0] bis[ 1007]
    Wenn ich folgende Abfrage mache:

    printf ("\n(test)array[1007][69]=:%i ",csv_array[1008][69]);
    

    kommt kein Speicherzugriffsfehler! auch wenn Spalte=1000 oder 3000! egal!

    Wie kann das sein!?


Anmelden zum Antworten