2016-12-02 2 views
0

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; 
} 
+7

Sauvez-vous du pointeur hell et utilisez ['std :: vector'] (http://fr.cppreference.com/w/cpp/container/vector) – NathanOliver

+0

' * off = (int *) realloc (* off, sizeof (int) * (++ compte)); 'Vous devez enregistrer le résultat du pointeur en 1ère place. Votre code fuit. –

+0

@ πάνταῥεῖ: écraser le pointeur d'origine avant de vérifier le résultat de 'realloc' est une mauvaise idée. – Olaf

Répondre

0

Je résolu en utilisant un autre pointeur dans la fonction appelée int * Offe et je travaille avec elle au lieu de. À la fin, j'écris * off = offe; et cela fonctionne

+0

D'abord, j'ai eu un problème avec les pointeurs. Je l'ai résolu en ajoutant un autre pointeur. Maintenant j'ai deux problèmes! –

+0

J'ai résolu sans utiliser off (l'argument de la fonction) pour utiliser realloc. J'ai travaillé avec un autre pointeur que jusqu'à la fin j'ai utilisé pour enregistrer son adresse de mémoire dans le double pointeur off –