Ainsi, comme le suggère le titre que j'ai besoin d'aide avec un morceau de code que j'ai écrit, ce qui est à l'origine d'une erreur de défaut de segmentation, voici le code:Pourquoi ce code provoque-t-il une erreur de segmentation?
vector* reads_file(char* name)
{
vector *vec = vector_new(); //creates a new vector with capacity = 0, size = 0 and elements = NULL
char *str_aux;
FILE *fp = fopen(name, "r");
if(fp == NULL){
printf("Error\n");
return NULL;
}
while(fgets(str_aux, BUFFER_SIZE, fp) != NULL){
if(vextor_inserts(vec, str_aux, -1) == -1)
return NULL;
free(str_aux);
}
fclose(fp);
return vec;
}
et:
int vector_inserts(vector* vec, const char* value, int pos)
{
int i, n;
if(vec == NULL || pos < -1 || pos > vec->size)
return -1;
/* increases vector's elements if there's not enough capacity */
if(vec->size == vec->capacity)
{
if(vec->capacity == 0)
vec->capacity = 1;
else
vec->capacity *= 2;
vec->elements = (v_element*)realloc(vec->elements, vec->capacity * sizeof(v_element));
if(vec->elements == NULL)
return -1;
}
/* if pos=-1 inserts in the end of the vector */
if(pos == -1)
pos = vec->size;
/* copies every element from the pos position till the end of the vector to pos+1 */
for(i=vec->size-1; i>=pos; i--)
{
vec->elements[i+1] = vec->elements[i];
}
/* allocates space for the new string on position pos */
vec->elements[pos].str = (char*)calloc(strlen(value)+1, sizeof(char));
if(vec->elements[pos].str == NULL)
return -1;
/* copies value */
strcpy(vec->elements[pos].str, value);
vec->size++;
return pos;
}
et dont les structures sont:
typedef struct
{
char *str;
} v_element;
typedef struct
{
/** total number of the vector's elements */
int size;
/** vector's capacity */
int capacity;
/** array of stored elements */
v_element* elements;
} vector;
oh et
#define BUFFER_SIZE 256
il compile juste à droite (en utilisant un autre morceau de code qui a une fonction principale qui appelle la fonction reads_file (...)) mais en l'exécutant, il se produit une erreur de segmentation lors de l'appel de vector_inserts (...), mais pourquoi cela arrive-t-il? Je ne peux pas comprendre. Il me semble également qu'aucun pointeur n'est appelé à tort.
Toute aide serait appréciée
vector_new(); ? – Steephen
'fgets (str_aux, BUFFER_SIZE, fp)': 'str_aux' ne s'initialise pas. – BLUEPIXY
comment ça va? ou, mieux, pourquoi pas? –