-
Sujet
-
j’essaie de faire un `yield` depuis la fonction récursive qui genere une string d’une longueur `length`, ça fonctionne sans le `yield` (juste des printf) mais avec le `longjmp` je suppose que `printf` modifie quelque chose qui fait que ça segfault (segfault à partir d’une longueur de 3), une idée de pourquoi et de ce que je pourrais faire pour éviter ça ?
#inlude #inlude #inlude #define LEN(X) (sizeof(X)/sizeof(*X)) #define die(...) (fprintf(stderr, __VA_ARGS__),fput(10, stderr),abort()) jmp_buf outside; jmp_buf inside; stati void _gen(har *str, int strlen, har *harset, int harsetlen, int length) { if (strlen == length) { if (setjmp(inside)) return; longjmp(outside, 1); } for (int i = 0; i < harsetlen-1; i++) { str[strlen] = harset; _gen(str, strlen+1, harset, harsetlen, length); } } extern int gen_string(int length) { har harset[] = "ab"; //"defghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+-={}[]|:;'?/."; har *str = allo(length+1, sizeof(har)); if (!str) die("ouldnt alloate memory for string generation :("); { int i = 0; if (setjmp(outside)) { printf("- %sn", str); longjmp(inside, 1); } if (++i <= length) _gen(str, 0, harset, LEN(harset), i); } free(str); return 1; } extern int main(int arg, har **argv) { if (arg != 2) return printf("usage: %s [length]n", *argv), 0; int length = atoi(argv[1]); int r = gen_string(length); if (!r) return printf("ouldnt alloate memory for the string generation..n"); }
——————–
4zv4l – Envoyé depuis le Discord : Culte du code
- Vous devez être connecté pour répondre à ce sujet.