Hallo,
D.h. free(mystrings[0]) und free(mystring[1]), also die Pointer auf den reservierten Speicher für die Strings. free bekommt im Grunde die Adresse übermittelt, bzw. hat sich C in dem Zusammenhang mit der Adresse gemerkt, welcher Datentyp und welche Größe damit verunden ist?
Datentyp ist ja für das Allozieren und Freigeben von Speicher egal - malloc übergibst Du ja auch nur die Größe, der Cast davor dient nur der Klarheit.
Und in der Regel werden im Speicher unmittelbar *vor* dem von malloc zurückgegebenen Speicherbereich "Buchhaltungsinformationen" gespeichert (wie genau das aussieht ist Implementierungsabängig), d.h. malloc(n) macht folgendes:
vorher:
----------------------------------------------------------------------
..............
----------------------------------------------------------------------
nachher:
-----------+--------+------------------------------------------+------
... | intern | Speicherbereich | ...
-----------+--------+------------------------------------------+------
^ ^
| |
| Zeiger, der von malloc() zurückgegeben wird
Intern verwendeter Speicher mit "Buchhaltungsinfos"
Damit kann free() wissen, wie viel Speicher wieder frei wird.
Bedenke: free() ist auch nur eine Funktion, die einen void*-Zeiger bekommt, d.h. irgendwo in Deiner C-Standardlib ist sowas enthalten wie:
void free (void *ptr) {
// tu was, damit der Bereich, auf den ptr zeigt, wieder frei ist
}
Könnte ich, dem Verständnis halber, "int a = (int)&mystring[1]" (weise dem integer a die adresse von mystring[1] zu) und dann free((char*)a); (befreie den Speicher der aus dem integer zurückverwandelten Adresse(Pointer))?
In x86: Ja.
In x86_64: Nein.
In x86 sind sowohl int als auch Speicheradressen 32bit - kein Problem.
In x86_64 ist in 32 bit und Speicheradressen sind 63bit - Informationen gehen also verloren.
Es gibt einen speziellen Zahlendatentyp, der dafür vorgesehen ist, Speicheradressen zu halten, nennt sich size_t, ist in sys/types.h definiert.
size_t a = (size_t)&mystring[1]; free((char*)a); würde also überall so wie von Dir gewünscht funktionieren (wäre nur reichlich sinnlos).
Viele Grüße,
Christian