J'appelle une fonction qui branche et exécute le code d'un autre processus pour moi. Il y a plusieurs processus, étiquetés B, C et D. J'ai un code presque identique pour créer les différents processus. Pour une raison bizarre que je ne peux pas découvrir, une des fonctions de création de processus provoque une erreur de segmentation. Ils me semblent identiques. Y a-t-il une chance que quelqu'un puisse peser, peut-être me donner un aperçu de ce qu'est le problème?Strange sprintf erreur dans C
void spawn_process_b(int fileID[]){
int pid;
char * argv[2];
sprintf(argv[0], "%d", fileID[0]);
sprintf(argv[1], "%d", fileID[1]);
pid = fork();
if (pid == 0)
{
execv("PipeW1", argv);
}
}
void spawn_process_c(int fileID[]){
int pid;
char * argv[2];
sprintf(argv[0], "%d", fileID[0]);
sprintf(argv[1], "%d", fileID[1]);
pid = fork();
if (pid == 0)
{
execv("PipeW2", argv);
}
}
Grâce à la mise en points d'arrêt avec Cout < < "BP1" < < endl; et ainsi de suite, j'ai découvert que spawn_process_b s'exécutera très bien. spawn_process_c entrera, mais obtiendra un segfault lors de la première instruction de sprint. Quelqu'un a des idées? A l'origine, spawn_process_b me donnait des problèmes, et ... ma main à Dieu ... Je n'ai rien changé, et ça a commencé à fonctionner. Je me demande presque si c'est quelque chose qui pourrait dépendre de l'environnement?
Pourquoi cela fonctionnerait-il dans spawn_process_b? Et cela fonctionne vraiment ... le processus supplémentaire appelé affichera des résultats à l'écran qui prouvent qu'il obtient les valeurs. – rybosome
Ceci s'applique aux deux segments de code. 'char * argv [2]' alloue un tableau de deux pointeurs, mais n'initialise aucun pointeur. – Thanatos
@Ryan: Vous êtes chanceux. C'est un comportement indéfini - il pourrait fonctionner, il pourrait ne pas fonctionner, selon l'état actuel de la mémoire. – Thanatos