-
Segmentation Fault
Hey guys,
I'm getting a stupid segmentation fault on a piece of code.
My .h is the following :
Code:
typedef struct sFicheiro{
char *ficheiro;
int nbits;
struct sFicheiro *proximo;
} Node, *Ficheiro;
typedef struct Ficheiros {
int numFicheiros;
Ficheiro lista;
} NFicheiros;
NFicheiros cria(void);
NFicheiros insereFicheiro(char *ficheiro, NFicheiros aux);
void showLib(NFicheiros lib);
And my .c is as following :
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "array.h"
NFicheiros cria (void)
{
NFicheiros aux;
aux.numFicheiros=0;
aux.lista=NULL;
return aux;
}
NFicheiros insereFicheiro(char *ficheiro, NFicheiros aux) {
printf("1\n");
Ficheiro novo = (Ficheiro*)malloc(sizeof (Node));
printf("2\n");
novo->ficheiro=(char*)malloc(sizeof(ficheiro)+1);
printf("3\n");
novo->nbits= read(ficheiro,stdin,strlen(ficheiro));
novo->proximo=NULL;
novo->ficheiro=strdup(ficheiro);
printf("4\n");
aux.lista->ficheiro=strdup(ficheiro);
printf("5\n");
if (aux.numFicheiros == 0)
{
printf("5\n");
//aux=(NFicheiros)malloc(sizeof(NFicheiros));
aux.numFicheiros=1;
aux.lista=novo;
printf("6\n");
return aux;
}
else
{
novo->proximo=aux.lista;
aux.lista=novo;
return aux;
}
}
void showLib(NFicheiros aux)
{
int j = 0;
if(aux.numFicheiros == 0) printf("Não existem ficheiros a ser monitorizados.\n");
else
{
while (aux.lista!=NULL)
{
printf("%s",aux.lista->ficheiro);
aux.lista->proximo;
}
}
}
int main ()
{
NFicheiros aux;
aux = cria();
aux=insereFicheiro("ola",aux);
//showLib(aux);
printf("%d \n",aux.numFicheiros);
}
And the output is :
Code:
1
2
3
4
Falha de segmentação
Why am I getting an error here :
aux.lista->ficheiro=strdup(ficheiro);
?
Thanks a lot.
:)
-
aux.lista is set to null in function cria. Then you are passing it to function insereFicheiro and dereferencing it, which gives you the segmentation fault.
-
I'm passing it to function insereFicheiro.
Since it is already set as NULL there shouldn't be a problem should there ?
Or am I to allocate memory for it ?
thanks.
-
If the pointer is NULL, you're trying to access an invalid part of memory, hence the segmentation fault. You need to allocate memory first and assign its address to aux.lista before dereferencing.
-
I've worked it out.
Thanks a lot everyone who answered! :D