URL: https://linuxfr.org/forums/programmation-c--2/posts/kernel-2612-2611-2612-seg-fault Title: [kernel 2.6.12] => 2.6.11 -> 2.6.12 => Seg fault Authors: ymerejt Date: 2005年07月11日T14:41:31+02:00 Tags: Score: 0 Bonjour, Je travail sur un programme personnel qui fonctionnait très bien avant ma mise à jour kernel du 2.6.11 au 2.6.12. Depuis, j'ai une erreur de segmentation. Cette erreur disparait lorsque je repasse sur mon 2.6.11. J'ai réussit à isoler ce problème dans un petit programme C/C++. Je recherche des personnes pouvant compiler, tester ce programme pour me dire quelle est leur version du noyau et si il y a eu une erreur de segmentation ou non. (Note: utilisation ou non des NPTL). De plus si vous avez une idée pouvant expliquer ce comportement ... Code: £spaces£ £/spaces£#include £spaces£ £/spaces£#include <unistd.h> £spaces£ £/spaces£#include <pthread.h> £spaces£ £/spaces£#include <expect.h> £spaces£ £/spaces£#include <stdlib.h> £spaces£ £/spaces£#include £spaces£ £/spaces£ £spaces£ £/spaces£using namespace std; £spaces£ £/spaces£ £spaces£ £/spaces£static char *username; £spaces£ £/spaces£static char *prompt; £spaces£ £/spaces£ £spaces£ £/spaces£void error(const char *message) { £spaces£ £/spaces£cerr << "Error: " << message << endl; £spaces£ £/spaces£exit(EXIT_FAILURE); £spaces£ £/spaces£} £spaces£ £/spaces£ £spaces£ £/spaces£void *console_task(void *) { £spaces£ £/spaces£int fd; £spaces£ £/spaces£FILE *cnx = exp_popen("bash"); £spaces£ £/spaces£if (cnx == 0) £spaces£ £/spaces£error("bash connexion failed"); £spaces£ £/spaces£string prompt_regexp(".*" + string(username) + "@.* $"); £spaces£ £/spaces£exp_fexpectl(cnx, exp_regexp, prompt_regexp.c_str(), 1, exp_end); £spaces£ £/spaces£string sleep_command = "sleep 10\n"; £spaces£ £/spaces£fwrite(sleep_command.c_str(), sizeof(char), sleep_command.length(), cnx); £spaces£ £/spaces£ £spaces£ £/spaces£exp_fexpectl(cnx, exp_regexp, prompt, 1, exp_end); £spaces£ £/spaces£//prompt_regexp.c_str(), 1, exp_end); £spaces£ £/spaces£return 0; £spaces£ £/spaces£} £spaces£ £/spaces£ £spaces£ £/spaces£int main(int argc, char **argv) { £spaces£ £/spaces£username = getenv("USER"); £spaces£ £/spaces£string sprompt(".*" + string(username) + "@.* $"); £spaces£ £/spaces£prompt = (char *)malloc(sprompt.length() + 1 * sizeof(char *)); £spaces£ £/spaces£strcpy(prompt, sprompt.c_str()); £spaces£ £/spaces£cout << prompt << endl; £spaces£ £/spaces£if (argc > 1) £spaces£ £/spaces£console_task(NULL); £spaces£ £/spaces£else { £spaces£ £/spaces£pthread_t task; £spaces£ £/spaces£ £spaces£ £/spaces£pthread_create(&task, NULL, console_task, NULL); £spaces£ £/spaces£pthread_join(task, NULL); £spaces£ £/spaces£} £spaces£ £/spaces£return EXIT_SUCCESS; £spaces£ £/spaces£} Pour compiler : g++ -o segfault -lexpect5.42 -lpthread segfault.c (il sera peut ête nécessaire d'adapter la version de la libexpect). Merci de votre aide,

AltStyle によって変換されたページ (->オリジナル) /