Я создаю общий динамический массив в C. Всякий раз, когда я обновляю какое-либо значение в массиве, оно не обновляется должным образом и, кажется, обновляет все в массиве.Вывод моего основного файла не ожидается.У меня проблемы с поиском ошибки в gdb.
Мой заголовочный файл:
#ifndef INC_6_VECTOR_H
#define INC_6_VECTOR_H
typedef struct Vector_S * Vector;
Vector init_Vector();
void free_Vector(Vector);
void vector_add(Vector, int, void *);
void * vector_value(Vector, int);
#endif //INC_6_VECTOR_H
Мой исходный файл:
#include <stdlib.h>
#include <stdio.h>
#include "Vector.h"
#define STARTINGSIZE 10
struct Vector_S{
void **head;
size_t size;
size_t length;
};
Vector init_Vector(){
Vector vector = malloc(sizeof(struct Vector_S));
vector->size = 0;
vector->length = STARTINGSIZE;
vector->head = malloc(STARTINGSIZE * sizeof(void *));
return vector;
}
void free_Vector(Vector vector){
free(vector->head);
free(vector);
}
void vector_add(Vector vector, int idx, void * data){
if (vector->size >= vector->length){
size_t oldLength = vector->length;
void *headTemp;
headTemp = realloc(vector->head, 2*oldLength* sizeof(void *));
if (headTemp == NULL){
printf("Failed realloc\n");
exit(1);
}
vector->length = 2*oldLength;
vector->head = headTemp;
}
vector->head[idx] = data;
vector->size++;
}
void * vector_value(Vector vector, int idx){
return vector->head[idx];
}
и мой тестовый файл
#include <stdio.h>
#include "Vector.h"
int main(void){
printf("Main run test\n");
Vector v = init_Vector();
for(int i=0; i<10; i++){
vector_add(v, 0, (void *)&i);
}
for(int i=0; i<10; i++){
printf("The value at %d idx is %d\n", i, *(int*)vector_value(v,i));
}
}