OVH Cloud OVH Cloud

Debutant ereur de segmentation et char *

2 réponses
Avatar
Nico
OS : Linux mandrake 9.2 RC2
Le simple code ci dessous affiche après l'execution :
Segmentation fault (core dumped)

Gdb me donne :

Program received signal SIGSEGV, Segmentation fault
0x4000af6e in _dl_init () from /lib/ld-linux.so.2


#include<iostream>
using namespace std;

int main(){
char *a,*b;
cout<<"a ? : "<<endl;
cin>>a;

cout<<"b ? "<<endl;
cin>>b;
}

Je ne comprends vraiment pas mon erreur
Si quelqu'un peut m'aider
Merci d'avance

nico

2 réponses

Avatar
Benoit Rousseau
Nico wrote:
OS : Linux mandrake 9.2 RC2
Le simple code ci dessous affiche après l'execution :
Segmentation fault (core dumped)

Gdb me donne :

Program received signal SIGSEGV, Segmentation fault
0x4000af6e in _dl_init () from /lib/ld-linux.so.2


#include<iostream>
using namespace std;

int main(){
char *a,*b;
cout<<"a ? : "<<endl;
cin>>a;

cout<<"b ? "<<endl;
cin>>b;
}


Que sont a et b ? Des chaines de caractères ?
Pour faire une saisie dans une chaine, il faut qu'elle soit allouée...
char *a n'est qu'un pointeur...
char *a = new char[64]; alloue 64 char à "a"
Mais il faut penser à dé-allouer (delete [] a;)
Sinon, char a[64]; produit le même effet dans ton cas.

Il y a toujours un risque d'overflow (si cin contient plus de 64
charactères, où va le reste des caractères ? ). Alors le mieux serait
encore d'utiliser les string qui gèrent d'elles même l'espace mémoire.

std::string a, b;



--
--------------------------------------------
Benoît Rousseau : roussebe at spray dot se
Jouez en programmant : http://realtimebattle.sourceforge.net/

Avatar
Loïc Joly
Nico wrote:
OS : Linux mandrake 9.2 RC2
Le simple code ci dessous affiche après l'execution :
Segmentation fault (core dumped)

Gdb me donne :

Program received signal SIGSEGV, Segmentation fault
0x4000af6e in _dl_init () from /lib/ld-linux.so.2


#include<iostream>
using namespace std;

int main(){
char *a,*b;
cout<<"a ? : "<<endl;
cin>>a;

cout<<"b ? "<<endl;
cin>>b;
}

Je ne comprends vraiment pas mon erreur
Si quelqu'un peut m'aider
Merci d'avance


Tu utilises des pointeurs (char*), donc tu dois gérer à la main
l'allocation de mémoire qui va bien. C'est difficile, et bien souvent
inutile.

Si ce que tu veux, c'est des chaines de caractères, réécrit ton
programme ainsi :

#include<iostream>
#include <string>
using namespace std;

int main()
{
string a, b;
cout<<"a ? : "<<endl;
cin>>a;

cout<<"b ? "<<endl;
cin>>b;
}