私はC++のバックグラウンドを持ち、Cで初心者です.Cでジェネリックベクターを作成したいと思いました。各要素を削除するフリー関数を追加するまでは問題ありませんでした。しかし今度はfree()
関数をvectorFree()
で実行している間、プログラムはクラッシュします。このコードが無効なポインタを引き起こすのはなぜですか?
私はまだフリー関数をテストしていませんが、私はNULLを渡してしまい、ベクトルはすでに動作しません。フリー機能を追加する前に、ベクターはうまくいきました。ここで
は、私はすべてのコメントと無関係なコードを省略し、私のコードです:
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.h
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);
}
これがCならば、あなたのファイルはなぜ 'vectorTest.cpp'と呼ばれていますか? – melpomene