Ich habe ein Problem mit der realloc-Funktion in C. Ich übergebe Ihnen einen Code unten:
typedef struct _Pool Pool;
typedef struct _Item Item;
struct _Pool {
Item ** items;
unsigned int itemsCount;
unsigned int poolSize;
unsigned int poolStep;
};
struct _Item {
char * file;
unsigned int lenOfFilePath;
unsigned int x;
};
void Pool_insert(Pool ** pool, Item * item)
{
if ((*pool)->itemsCount + 1 == (*pool)->poolSize)
{
(*pool)->items = realloc((*pool)->items, sizeof(Item *)*((*pool)->poolSize + (*pool)->poolStep));;
if (!(*pool)->items) return;
(*pool)->poolSize += (*pool)->poolStep;
}
(*pool)->items[(*pool)->itemsCount++] = item;
}
Ich sende den ersten Zuweisungscode nicht, aber wenn ich die Anzahl der Artikel, die ich dort verwende, erhöhe, funktioniert alles gut. Wenn ich realloc aufrufe, erhalte ich einen solchen Fehler:
malloc: *** Fehler für Objekt 0x19dba8: Der neu zugewiesene Zeiger war nicht zugewiesen
Könnten Sie mir bitte helfen, mein Problem zu lösen?
Hier ist die Erstellungsmethode für Pool:
void Pool_create(Pool ** pool, unsigned int poolSize)
{
unsigned int poolMemSize = sizeof(Pool) + sizeof(Item *)*poolSize;
*pool = malloc(poolMemSize);
if (!*pool) return;
memset(*pool,0,poolMemSize);
(*pool)->itemsCount = 0;
(*pool)->poolSize = poolSize;
(*pool)->poolStep = POOL_STEP;
(*pool)->items = (Item **)((char*)(*pool) + sizeof(Pool));
if(!(*pool)->items) return;
memset((*pool)->items, 0, sizeof(Item *) * poolSize);
}
Wie ich gesagt habe, wenn ich zum Beispiel 1000 Elemente einfügen und den Speicher durch die Funktion create zuweisen möchte, funktioniert alles gut, wenn ich die Größe des Startpools für 100 Elemente deklariere und dann Elemente neu zuweisen möchte, erhalte ich den Fehler.
Vielen Dank für diese schnelle Antwort.