Access violation writing location 0x00000000



  • Hallo!

    Ich bekomme beim Ausführen meiner exe die o.g Fehlermeldung.
    Sie kommt immer dann, wenn ich die erste Var. der Struktur beschreiben will.

    Weiß einer, woran das liegt?

    struct point{
        float x;
        float y;
        float z;
    }newPoint;
    
    main (){
                 ...
        printf("\nx: ");
        scanf("%f",&newPoint.x);
    
        printf("\ny: ");
        scanf("%f",&newPoint.y);
    
        printf("\nz: ");
        scanf("%f",&newPoint.z);
                  ...
    
    }
    


  • Das liegt IMHO an den "...".
    Also an dem Code, den du hier weggelassen hast.



  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct point{
        float x;
        float y;
        float z;
    }newPoint;
    
    int main(void){
    
      char pfad[124]; 
      int lengthOfString_pfad; 
      printf("Pfad angeben: ");
      fgets(pfad,sizeof(pfad),stdin);  
    
    /* Das Enter-Zeichen, das fgets() an des Ende des Strings mitkopiert,
           wird ausgeschlossen.                                          */
      lengthOfString_pfad = strlen(pfad); 
      pfad[lengthOfString_pfad-1] = pfad[lengthOfString_pfad];
    
      FILE *f;
      f = fopen(pfad,"a");
    
      if(f == NULL){
          printf("Datei kann nicht geoeffnet werden!");
          return 1;
      }else{
           printf("Datei erfollgreich geoeffnet.\n\n");
       }
    
      char operation='a';
      while(operation != 'q'){
          printf("\n--Moegliche Operationen--\n");
          printf("\nn = Einen Punkt einlesen\n");
          printf("l = Alle Punkte ausgeben\n");
          printf("q = Programm beenden\n");  
          printf("\nBitte die gewuenschte Operation eingeben: ");          
          scanf("%c",&operation);  
    
          while(getchar() != '\n');
    
          switch(operation){
    
              case 'n' : printf("\nx: ");
                         scanf("%f",newPoint.x);
    
                         printf("\ny: ");
                         scanf("%f",newPoint.y);
    
                         printf("\nz: ");
                         scanf("%f",newPoint.z);
    
                         break;          
              case 'l' : printf("l");
                         break;
              case 'q' : break; /*bei 'q' soll keine Fehlermeldung ausgegeben werden*/
              default  : printf("Zeichen unbekannt");                            
              }    
      }  
      fclose(f);
      system("PAUSE");	
      return 0;
    }
    


  • Der Fehler wird sein, dass im Programm eben kein & vor newPoint.x/y/z steht. Ein Detail, was Du in der Frage übrigens dazu- bzw. weggedichtet hast.



  • LordJaxom_lg schrieb:

    Der Fehler wird sein, dass im Programm eben kein & vor newPoint.x/y/z steht. Ein Detail, was Du in der Frage übrigens dazu- bzw. weggedichtet hast.

    Öhm, geht tatsächlich...
    Die Version hier habe ich mit Dev++ compiliert. Als die Fehlermeldung aber kam, hab den Code ins Visual Studio reinkopiert und die Zeiger dann hinzugefügt. Da kam aber wieder die selbe Fehlermeldung. 😞



  • Hallo nochmal!

    Ich bin ein kleines Stückchen weiter im Programm und schon auf das nächste Problem gestoßen, das ich mir nicht erklären kann:

    Meine Funktion "fileWrite" dient ausschließlich dazu, Punkte(float-Werte) in eine Datei zu schreiben, in dem Fall eine .txt-Datei. Das klappt auch, nur habe ich in meiner Datei zB anstatt den Zahlen "1,2,3" soetwas " €? @ @@"

    Warum ist das so?

    main(){
    ... 
    FILE *f;
    f = fopen(pfad,"a+b");
    ...
    fileWrite(f);
    
    fclose(f);
    }
    
    struct point{
        float x;
        float y;
        float z;
    }newPoint;
    
    void fileWrite(FILE *f){
    
          printf("\nx: ");
          scanf("%f",&newPoint.x);
    
          printf("\ny: ");
          scanf("%f",&newPoint.y);
    
          printf("\nz: ");
          scanf("%f",&newPoint.z);
    
          fwrite(&newPoint, sizeof(newPoint), 1, f);
    
         }
    


  • Mit fprintf() kannst Du das in eine Textdatei schreiben. fwrite() schreibt das
    halt binär rein. Das gibt dann diese Hühnerfüße.


Log in to reply