Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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/
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/
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/
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; }
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;