Gino+89+
13-05-2010, 10:09
Ciao a tutti...
Ho compilato con successo il seguente codice su Linux Ubuntu 9.04 con gcc (4.3.3) senza nessun errore o warning...
Ma eseguendolo, aggiungendo anche una sola realloc() (vedi commento codice), a run-time mi da Segmentation fault!
Il codice e' molto semplice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
int addElem(char **array,int *len,const char *elem);
void printElements(char **array,const int len);
void freeElements(char **array,int *len);
int main()
{
char **array;
int lenght=0;
array=(char**)malloc(sizeof(char*));
*array=strdup("elem1");
lenght++;
puts(array[lenght-1]);
if(addElem(array,&lenght,"asd2"))
{
printf("%d\n",lenght);
puts(array[lenght-1]);
}
if(addElem(array,&lenght,"asd3"))
{
printf("%d\n",lenght);
puts(array[lenght-1]);
}
if(addElem(array,&lenght,"asd4")) /* <== This generate the error! */
{
printf("%d\n",lenght);
puts(array[lenght-1]);
}
printElements(array,lenght);
freeElements(array,&lenght);
return 0;
}
int addElem(char **array,int *lenght,const char *elem)
{
if((array=realloc(array,((*lenght)+1)*sizeof(char*)))!=NULL)
{
array[(*lenght)++]=strdup(elem);
puts(array[(*lenght)-1]);
return 1;
}
return 0;
}
void printElements(char **array,const int len)
{
int i;
for(i=0;i<len;i++)
puts(array[i]);
}
void freeElements(char **array,int *len)
{
int i;
for(i=0;i<(*len);i++)
free(array[i]);
*len=0;
free(array);
}
Se togliete l'ultimo:
if(addElem(array,&lenght,"asd4"))
{
printf("%d\n",lenght);
puts(array[lenght-1]);
}
viene eseguito senza errori...
Da cosa puo' derivare questo errore??
Grazie mille!
Ho compilato con successo il seguente codice su Linux Ubuntu 9.04 con gcc (4.3.3) senza nessun errore o warning...
Ma eseguendolo, aggiungendo anche una sola realloc() (vedi commento codice), a run-time mi da Segmentation fault!
Il codice e' molto semplice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
int addElem(char **array,int *len,const char *elem);
void printElements(char **array,const int len);
void freeElements(char **array,int *len);
int main()
{
char **array;
int lenght=0;
array=(char**)malloc(sizeof(char*));
*array=strdup("elem1");
lenght++;
puts(array[lenght-1]);
if(addElem(array,&lenght,"asd2"))
{
printf("%d\n",lenght);
puts(array[lenght-1]);
}
if(addElem(array,&lenght,"asd3"))
{
printf("%d\n",lenght);
puts(array[lenght-1]);
}
if(addElem(array,&lenght,"asd4")) /* <== This generate the error! */
{
printf("%d\n",lenght);
puts(array[lenght-1]);
}
printElements(array,lenght);
freeElements(array,&lenght);
return 0;
}
int addElem(char **array,int *lenght,const char *elem)
{
if((array=realloc(array,((*lenght)+1)*sizeof(char*)))!=NULL)
{
array[(*lenght)++]=strdup(elem);
puts(array[(*lenght)-1]);
return 1;
}
return 0;
}
void printElements(char **array,const int len)
{
int i;
for(i=0;i<len;i++)
puts(array[i]);
}
void freeElements(char **array,int *len)
{
int i;
for(i=0;i<(*len);i++)
free(array[i]);
*len=0;
free(array);
}
Se togliete l'ultimo:
if(addElem(array,&lenght,"asd4"))
{
printf("%d\n",lenght);
puts(array[lenght-1]);
}
viene eseguito senza errori...
Da cosa puo' derivare questo errore??
Grazie mille!