Ich schreibe eine Funktion, die die Größe eines dynamischen Speicherobjekts erhöht, das mit malloc erstellt wird. Die Funktion sollte als Argumente einen Zeiger auf den Speicherblock nehmen, der erhöht werden soll, die aktuelle Größe des Blocks und den Betrag, um den der Block erhöht wird.Wie wird die Größe verschiedener Arten von Typen in der gleichen Funktion mit C erhalten?
Etwas wie folgt aus:
int getMoreSpace(void **pnt, int size, int add) {
xxxxxx *tmp; /* a pointer to the same as pnt */
if (tmp = realloc(pnt, (size+add)*sizeof(xxxxxx))) { /* get size of what pnt points to */
*pnt=tmp;
return 1;
else return 0;
}
Das Problem ist, dass ich die Funktion wollen nicht arbeiten, ganz gleich, was pnt Punkte. Wie erreiche ich das?
Ich verstehe nicht wirklich, was Sie sagen. Warum ist es wichtig, dass pnt lokal ist? Ich brauche es nur, bis die Funktion zurückkehrt. Warum ist diese Hülle auch schädlich? Ich mache diese Art von Größenzunahme mehrere Male in meinem Programm unter verschiedenen Umständen, soweit ich sehen kann, macht diese Funktion nur meinen Programmierer sauberer und einfacher, weil es das Tippen in der gleichen Sache viele Male beseitigt (ist das nicht der Punkt von Funktionen sowieso?). – paldepind
Ich bin nicht 100% sicher, aber ich denke, dass es in C keinen "lokalen" Zeiger gibt. –
@Stefanos: Funktionsargumente sind "lokale Variablen" in dem Sinne, dass sie den Gültigkeitsbereich der Funktion verlassen . Das Zuweisen eines neuen Werts zu "ptr" hat keine Auswirkungen; Tatsächlich kann und sollte der Compiler die Zuweisung optimieren. –