Salut j'ai un pointeur que je veux manipuler dans une fonciont donc j'utilise un double pointeur comme argument de la fonction .. le problème est que quand l'appel realloc est généré un défaut de segmentation .. ici, il est mon codePasser et redéfinir un pointeur dans une fonction
Loader::Loader(char* filename)
{
file_desc=open(filename,O_RDONLY);
if(file_desc<0) {
std::cout<<"Error to open file..."<<std::endl;
}
offsets=(int*)malloc(sizeof(int));
this->detect_element(&offsets,'o',0);
}
void Loader:: detect_element(int** off,char p,int loffset,int end)
{
char buffer;
int count=1;
int i=0;
std::cout<<"Starting with caracter "<<p<<" from "<<loffset;
if(end!=-1)
{
std::cout<<" and ending to "<<end<<std::endl;
}else{
std::cout<<" and ending to the end"<<std::endl;
}
lseek(file_desc,loffset,SEEK_SET);
while(read(file_desc,&buffer,1)>0)
{
if(buffer==p && state==CR)
{
*off[count-1]=i;
*off=(int*)realloc(*off,
sizeof(int)*(++count));
}
else if(buffer=='\n'){
state=CR;
}
else{
state=-1;
}
i++;
if(end!=-1&&end==i){break;}
}
std::cout<<"Number of objs detected is "<<this->Length(*off)
<<count<<std::endl<<std::endl;
}
Sauvez-vous du pointeur hell et utilisez ['std :: vector'] (http://fr.cppreference.com/w/cpp/container/vector) – NathanOliver
' * off = (int *) realloc (* off, sizeof (int) * (++ compte)); 'Vous devez enregistrer le résultat du pointeur en 1ère place. Votre code fuit. –
@ πάνταῥεῖ: écraser le pointeur d'origine avant de vérifier le résultat de 'realloc' est une mauvaise idée. – Olaf