Speicherverwaltung bei C/C++

  • C

Es gibt 34 Antworten in diesem Thema. Der letzte Beitrag () ist von Gonger96.

    3daycliff: also bei mir kommt wieder dieser "undefiniertes verhalten" wert raus
    Gonger96: ne ich wollte ned den wert, sondern die addresse inkrementieren
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Radinator schrieb:

    WARUM zwar verschiedene Adressen, aber jedes mal die darauffolgende Zelle den selben Wert hat
    Ganz einfach: Du bist immer noch in deinem Programm. Es kommen immer die selben Werte heraus, weil dein Compiler schon beim Kompilieren Speicher reserviert hat.
    Mit freundlichen Grüßen,
    Thunderbolt
    Ganz einfach du greifst auf dir unbekannten Speicher zu, worin dein Program wohl irgendeine Variable abgelegt hat (guck dir mal die Disassembly an). Speicheradressen sind immer 1 Byte. Ob du jetzt einen int* hast und um 4 Bytes in/dekrementierst oder ein char* um 1 Byte ist dir überlassen.

    3daycliff schrieb:

    heißt das ja noch lange nicht, dass der Inhalt festgelegt wird.
    Doch, weil in dem Executable die Bytes reingeschrieben werden. Beim Ausführen sucht sich das Betriebssystem eine freie Speicherstelle und lädt das Programm dorthin. Die Variable ändert ihre relative Position nie. Daher erscheinen immer die selben Werte. Etwas anderes ist es bei dynamisch allozierten Variablen (z.B. dynamischen Arrays), bei denen der Speicher zur Laufzeit mit malloc() reserviert wird.
    Mit freundlichen Grüßen,
    Thunderbolt
    Okokok danke an alle! Ich wollte hier keinen 3. Weltkrieg vom Zaune breche :D

    Eine letzte Frage hab ich noch: In nahezu allen Sprachen hat man den Datentyp 'String' (Java/C#/...).
    In C/C++ hab ich das noch nicht gefunden :/ Ich hab auch ma irgendwo gelesen dass ein String ein Char-Array ist. Heißt das also dass ich in C/C++ nicht string strVar = "ein Text"; schreiben kann sondern erst ein Char-Array definieren und dann die einzelnen Indizes mit den Chars füllen muss?
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    @timmi31061
    Ich verweise einfach mal #post897919 und dem Snippet int foo; printf("%d", foo);.

    @Radinator:
    In C++ gibt es std::string. In C arbeitet man da mit char-Pointern oder -Arrays.
    PS: "@Radinator: Sind die Adresse auch absteigend mit jeweils Differenz von 4?"

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „3daycliff“ ()

    timmi31061 schrieb:

    char* meinString = "Hallo Welt!";


    was ist da eigentlich der unteschied zwischen char* meinString... und char *meinString...?
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Ok danke

    Also ich habs ma mit --(i) probiert => auch 4 Bytes untschied
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Speicheradresse 0039FF0C enthaelt 5
    Speicheradresse 0039FF08 enthaelt -858993460
    Speicheradresse 0039FF04 enthaelt -858993460


    also von 0039FF0C über 0039FF08 auf 0039FF04 => "schrumpfen"

    EDIT: Ich glaub ich mach ab jetzt ein neues thema auf. Aber danke an alle!
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Radinator“ ()

    Radinator schrieb:

    In C/C++ hab ich das noch nicht gefunden

    In C hast du nur den char* , da es keine Klassen gibt. Die Stringklassen aus anderen Sprachen sind nur Wrapper. In C++ gibt's natürlich Klassen und so auch eine für Strings. Nämlich der basic_string<typename charT, typename traits = char_traits<charT>, typename alloc = allocater<charT>> . Für Ansi basic_string<char> = string und Unicode basic_string<wchar_t> = wstring. Je nach dem welches Encoding man möchte kann man natürlich auch char16_t oder char32_t.