I'm trying to fix a problem in my code since several days but I'm still stuck on it. I want to insert a value in a tab through a realloc but I have a memory leak (or something else) and I don't know why.
Here's my code:
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct struct_vector{
int nbElement;
double* element;
}s_vector;
typedef s_vector* p_s_vector;
p_s_vector vector_alloc(size_t n){
p_s_vector vect =(p_s_vector) malloc(sizeof(p_s_vector));
vect->nbElement = n;
vect->element = (double*) malloc(sizeof(double) * n);
for(int i=0; i<n; i++){
vect->element[i] = i;
}
return vect;
}
void vector_free(p_s_vector p_vector){
free(p_vector->element);
free(p_vector);
p_vector = NULL;
}
void vector_insert(p_s_vector p_vector, size_t i, double v){
if(i < 0 || i > p_vector->nbElement)
exit(0);
else{
p_s_vector temp = vector_alloc(p_vector->nbElement);
for(int k=0; k < temp->nbElement; k++)
temp->element[k] = p_vector->element[k];
p_vector->element = (double*)realloc(p_vector->element,sizeof(double)*(p_vector->nbElement++));
for(int k=0; k<i; k++)
p_vector->element[k] = temp->element[k];
p_vector->element[i] = v;
for(int k=i+1; k<p_vector->nbElement; k++)
p_vector->element[k] = temp->element[k-1];
vector_free(temp);
}
}
int main(){
p_s_vector vect = vector_alloc(3);
vector_insert(vect, 1, 11);
for(int i=0; i<vect->nbElement; i++){
printf("%.1f\n",vect->element[i]);
}
vector_free(vect);
return 0;
}
When I run my program, I have a double free or corruption (out) error. With Valgrind command, I have many "Address 0x4a4d048 is 0 bytes after a block of size 8 alloc'd" and I don't understand why
If someone can help me, it will be great. Thank you.