Ich habe einen C++ Hintergrund und bin ein Neuling in C. Ich wollte einen generischen Vektor in C schreiben. Dinge waren in Ordnung, bis ich beschloss, eine freie Funktion hinzuzufügen, um jedes Element zu löschen. Aber jetzt stürzt das Programm beim Ausführen der free()
Funktionen in vectorFree()
ab.Warum verursacht dieser Code einen ungültigen Zeiger?
Ich habe noch keine freie Funktion getestet, ich übergebe NULL und der Vektor kann schon nicht funktionieren. Der Vektor funktionierte gut, bevor ich die Funktion für freie Funktionen hinzufügte. Hier
ist meine Codes, Ich lasse alle Kommentare und irrelevanten Codes:
vector.h
typedef void (*FreeFunction)(void *element);
typedef struct Vector {
void *elements;
...
FreeFunction freeFunc;
} Vector;
Vector* vectorAlloc(size_t elemSize, VectorFreeFunction freeFunc);
void vectorFree(Vector *vector);
...
vector.c
Vector* vectorAlloc(size_t elemSize, VectorFreeFunction freeFunc)
{
Vector* vector = malloc(sizeof(vector));
...
vector->elements = malloc(elemSize * vector->capacity);
...
vector->freeFunc = freeFunc;
return vector;
}
void vectorFree(Vector *vector)
{
if (vector->freeFunc != NULL) {
for (int i = 0; i < vector->size; i++) {
vector->freeFunc(vectorAt(vector, i));
}
}
free(vector->elements);
free(vector);
}
...
vectorTest.cpp
void test()
{
Vector* num = vectorAlloc(sizeof(int), NULL);
vectorFree(num);
}
Wenn dies C ist, warum heißt Ihre Datei 'vectorTest.cpp'? – melpomene