Wait() function makes Segmentation fault (core dumped)
up vote
-2
down vote
favorite
When I run this code, i have "Segmentation fault (core dumped)".
Apparently it comes from the wait() section but I can't figure it out.
int main(int argc, char** argv)
pid_t pid, pid2;
int etat;
char** entree_util;
entree_util[0]="none";
char * accueil = "Veuillez entrer votre commanden";
while (entree_util[0]!="^D")
write(1,accueil, strlen(accueil)*sizeof(char) );
entree_util=lis_ligne();
pid=fork();
if(pid==-1)
perror("Erreur à l'appel de forkn");
exit(-1);
else if(pid==0)
execv(entree_util[0],entree_util+1);
else
pid2 = wait(&etat);
return 0;
c fork wait
add a comment |
up vote
-2
down vote
favorite
When I run this code, i have "Segmentation fault (core dumped)".
Apparently it comes from the wait() section but I can't figure it out.
int main(int argc, char** argv)
pid_t pid, pid2;
int etat;
char** entree_util;
entree_util[0]="none";
char * accueil = "Veuillez entrer votre commanden";
while (entree_util[0]!="^D")
write(1,accueil, strlen(accueil)*sizeof(char) );
entree_util=lis_ligne();
pid=fork();
if(pid==-1)
perror("Erreur à l'appel de forkn");
exit(-1);
else if(pid==0)
execv(entree_util[0],entree_util+1);
else
pid2 = wait(&etat);
return 0;
c fork wait
What does your debugger say where the crash is?
– melpomene
Nov 10 at 13:09
What does your compiler tell you (the warnings I mean)
– Jean-François Fabre
Nov 10 at 13:12
that's because you're not enabling the warnings
– Jean-François Fabre
Nov 10 at 13:17
add a comment |
up vote
-2
down vote
favorite
up vote
-2
down vote
favorite
When I run this code, i have "Segmentation fault (core dumped)".
Apparently it comes from the wait() section but I can't figure it out.
int main(int argc, char** argv)
pid_t pid, pid2;
int etat;
char** entree_util;
entree_util[0]="none";
char * accueil = "Veuillez entrer votre commanden";
while (entree_util[0]!="^D")
write(1,accueil, strlen(accueil)*sizeof(char) );
entree_util=lis_ligne();
pid=fork();
if(pid==-1)
perror("Erreur à l'appel de forkn");
exit(-1);
else if(pid==0)
execv(entree_util[0],entree_util+1);
else
pid2 = wait(&etat);
return 0;
c fork wait
When I run this code, i have "Segmentation fault (core dumped)".
Apparently it comes from the wait() section but I can't figure it out.
int main(int argc, char** argv)
pid_t pid, pid2;
int etat;
char** entree_util;
entree_util[0]="none";
char * accueil = "Veuillez entrer votre commanden";
while (entree_util[0]!="^D")
write(1,accueil, strlen(accueil)*sizeof(char) );
entree_util=lis_ligne();
pid=fork();
if(pid==-1)
perror("Erreur à l'appel de forkn");
exit(-1);
else if(pid==0)
execv(entree_util[0],entree_util+1);
else
pid2 = wait(&etat);
return 0;
c fork wait
c fork wait
edited Nov 10 at 13:08
melpomene
57.8k54489
57.8k54489
asked Nov 10 at 13:06
Wardhnorris Ier
11
11
What does your debugger say where the crash is?
– melpomene
Nov 10 at 13:09
What does your compiler tell you (the warnings I mean)
– Jean-François Fabre
Nov 10 at 13:12
that's because you're not enabling the warnings
– Jean-François Fabre
Nov 10 at 13:17
add a comment |
What does your debugger say where the crash is?
– melpomene
Nov 10 at 13:09
What does your compiler tell you (the warnings I mean)
– Jean-François Fabre
Nov 10 at 13:12
that's because you're not enabling the warnings
– Jean-François Fabre
Nov 10 at 13:17
What does your debugger say where the crash is?
– melpomene
Nov 10 at 13:09
What does your debugger say where the crash is?
– melpomene
Nov 10 at 13:09
What does your compiler tell you (the warnings I mean)
– Jean-François Fabre
Nov 10 at 13:12
What does your compiler tell you (the warnings I mean)
– Jean-François Fabre
Nov 10 at 13:12
that's because you're not enabling the warnings
– Jean-François Fabre
Nov 10 at 13:17
that's because you're not enabling the warnings
– Jean-François Fabre
Nov 10 at 13:17
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
The first instance of undefined behavior in your code is
char** entree_util;
entree_util[0]="none";
entree_util
is an uninitialized pointer.
You should probably change your loop structure:
char** entree_util;
while (1)
write(1, accueil, strlen(accueil)); // note: sizeof (char) is 1 by definition
entree_util = lis_ligne();
if (we_are_finished(entree_util))
break;
...
Note that entree_util[0] != "^D"
doesn't make sense as a condition; you're not comparing strings here, you're comparing pointers. The correct condition depends on what lis_ligne
returns, which you haven't shown.
Alternatively you can move the logic for prompting the user and reading a line into a separate helper function:
char **lis_ligne_avec_invite_de_commande(const char *accueil)
write(1, accueil, strlen(accueil));
return lis_ligne();
and then use it like this:
char** entree_util;
while (!we_are_finished(entree_util = lis_ligne_avec_invite_de_commande("Veuillez entrer votre commanden"))
...
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
The first instance of undefined behavior in your code is
char** entree_util;
entree_util[0]="none";
entree_util
is an uninitialized pointer.
You should probably change your loop structure:
char** entree_util;
while (1)
write(1, accueil, strlen(accueil)); // note: sizeof (char) is 1 by definition
entree_util = lis_ligne();
if (we_are_finished(entree_util))
break;
...
Note that entree_util[0] != "^D"
doesn't make sense as a condition; you're not comparing strings here, you're comparing pointers. The correct condition depends on what lis_ligne
returns, which you haven't shown.
Alternatively you can move the logic for prompting the user and reading a line into a separate helper function:
char **lis_ligne_avec_invite_de_commande(const char *accueil)
write(1, accueil, strlen(accueil));
return lis_ligne();
and then use it like this:
char** entree_util;
while (!we_are_finished(entree_util = lis_ligne_avec_invite_de_commande("Veuillez entrer votre commanden"))
...
add a comment |
up vote
1
down vote
The first instance of undefined behavior in your code is
char** entree_util;
entree_util[0]="none";
entree_util
is an uninitialized pointer.
You should probably change your loop structure:
char** entree_util;
while (1)
write(1, accueil, strlen(accueil)); // note: sizeof (char) is 1 by definition
entree_util = lis_ligne();
if (we_are_finished(entree_util))
break;
...
Note that entree_util[0] != "^D"
doesn't make sense as a condition; you're not comparing strings here, you're comparing pointers. The correct condition depends on what lis_ligne
returns, which you haven't shown.
Alternatively you can move the logic for prompting the user and reading a line into a separate helper function:
char **lis_ligne_avec_invite_de_commande(const char *accueil)
write(1, accueil, strlen(accueil));
return lis_ligne();
and then use it like this:
char** entree_util;
while (!we_are_finished(entree_util = lis_ligne_avec_invite_de_commande("Veuillez entrer votre commanden"))
...
add a comment |
up vote
1
down vote
up vote
1
down vote
The first instance of undefined behavior in your code is
char** entree_util;
entree_util[0]="none";
entree_util
is an uninitialized pointer.
You should probably change your loop structure:
char** entree_util;
while (1)
write(1, accueil, strlen(accueil)); // note: sizeof (char) is 1 by definition
entree_util = lis_ligne();
if (we_are_finished(entree_util))
break;
...
Note that entree_util[0] != "^D"
doesn't make sense as a condition; you're not comparing strings here, you're comparing pointers. The correct condition depends on what lis_ligne
returns, which you haven't shown.
Alternatively you can move the logic for prompting the user and reading a line into a separate helper function:
char **lis_ligne_avec_invite_de_commande(const char *accueil)
write(1, accueil, strlen(accueil));
return lis_ligne();
and then use it like this:
char** entree_util;
while (!we_are_finished(entree_util = lis_ligne_avec_invite_de_commande("Veuillez entrer votre commanden"))
...
The first instance of undefined behavior in your code is
char** entree_util;
entree_util[0]="none";
entree_util
is an uninitialized pointer.
You should probably change your loop structure:
char** entree_util;
while (1)
write(1, accueil, strlen(accueil)); // note: sizeof (char) is 1 by definition
entree_util = lis_ligne();
if (we_are_finished(entree_util))
break;
...
Note that entree_util[0] != "^D"
doesn't make sense as a condition; you're not comparing strings here, you're comparing pointers. The correct condition depends on what lis_ligne
returns, which you haven't shown.
Alternatively you can move the logic for prompting the user and reading a line into a separate helper function:
char **lis_ligne_avec_invite_de_commande(const char *accueil)
write(1, accueil, strlen(accueil));
return lis_ligne();
and then use it like this:
char** entree_util;
while (!we_are_finished(entree_util = lis_ligne_avec_invite_de_commande("Veuillez entrer votre commanden"))
...
edited Nov 10 at 13:29
answered Nov 10 at 13:10
melpomene
57.8k54489
57.8k54489
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53239246%2fwait-function-makes-segmentation-fault-core-dumped%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
What does your debugger say where the crash is?
– melpomene
Nov 10 at 13:09
What does your compiler tell you (the warnings I mean)
– Jean-François Fabre
Nov 10 at 13:12
that's because you're not enabling the warnings
– Jean-François Fabre
Nov 10 at 13:17