Speicherbereich nullen



  • Wenn ich einen allokierten Bereich habe, dann kann ich diesen Nullen, damit nichts anderes drin steht.

    Angeblich gibts da eine Funktion, die das kann, aber ich finde diese nicht in der Hilfe von Delphi C.

    Hat jemand da eine Ahnung ?!?



  • schau Dir mal memset an



  • Was ist eigentlich Delphi C?



  • Ich hab das Programm von Borland gemeint: Delphi C++ Builder, mit dem ich aber derzeit noch das C erlerne und danach dann C++ anfangen werde !



  • Abgesehen mal von den Möglichkeiten von ANSI C:
    Die Windows API stellt auch eine sehr schnelle Funktion dafür zur Verfügung.
    "ZeroMemory"



  • /* Reservierung von Speicher für die Zeiger */
      piMonat = (int *)malloc(MONATMAX);
      piTag   = (int *)malloc(TAGMAX);
    
      /* Freischreibung des Bereichs */
      memset(piMonat, '\0', strlen(piMonat) - 1);
      memset(piTag, '\0', strlen(piTag) - 1);
    

    Im Endeffekt müsste es dann so sein !!! - Ich hab dann nichts mehr im Zeiger stehen und somit ausgeschlossen, dass durch vorher vorhandene Zeichen im Speicherbereich ein Fehler entsteht.



  • cHillb3rT schrieb:

    /* Reservierung von Speicher für die Zeiger */
      piMonat = (int *)malloc(MONATMAX);
      piTag   = (int *)malloc(TAGMAX);
    
      /* Freischreibung des Bereichs */
      memset(piMonat, '\0', strlen(piMonat) - 1);
      memset(piTag, '\0', strlen(piTag) - 1);
    

    Urgs. Bitte rekapituliere die Arbeitsweise von strlen.

    Im Endeffekt müsste es dann so sein !!! - Ich hab dann nichts mehr im Zeiger stehen und somit ausgeschlossen, dass durch vorher vorhandene Zeichen im Speicherbereich ein Fehler entsteht.

    Quark, Fehler entstehen dadurch, dass man nicht weiß was man tut (so wie du oben). Man setzt genau dann null, wenn man das so braucht, nicht um irgendwelchen Fehlern vorzubeugen.



  • mir erscheints auch eher unüblich ints mit '\0' zu initialisieren, oder seh ich das falsch?



  • Wenn ich die Initialisierung so durchführe:

    /* Reservierung von Speicher für die Zeiger */
      piMonat = (int *)malloc(MONATMAX);
      piTag   = (int *)malloc(TAGMAX);
    
      /* Nullung des Speicherbereichs */
      memset(piMonat, '0', strlen(piMonat) - 1);
      memset(piTag, '0', strlen(piTag) - 1);
    

    Dann ist aber der Speicherbereich nicht komplett genullt, sondern nur eine Zahl. Muss ich jetzt praktisch eine Schleife konstruieren, die das macht ?



  • statt strlen solltest Du sizeof benutzen.



  • cHillb3rT schrieb:

    Wenn ich die Initialisierung so durchführe:
    Dann ist aber der Speicherbereich nicht komplett genullt, sondern nur eine Zahl.

    Bitte lies das obere Posting von mir.



  • '0' is nicht gleich 0 , und du willst sicher mit 0 initialieren, und nicht mit dem ascii wert von 0. abgesehen von strlen, was ja wohl augenscheinlich was mit STRings zu tun hat, nicht mit int.



  • Airdamn schrieb:

    statt strlen solltest Du sizeof benutzen.

    Dann memsettest du aber Speicher von der Grösse eines Zeigers, nicht gerade sinnvoll, oder?


Anmelden zum Antworten