J'essaye de porter mon code C GNU/Linux à FreeBSD. Au début, je pensais qu'il ne compilerait pas et n'agirait pas anormalement, mais il n'a pas agi sur moi parce qu'il n'utilisait pas de fonctions que l'autre système d'exploitation ne possède pas. Bien qu'il se compile bien (pas d'erreurs ou d'avertissements en utilisant -Wall
), l'application conserve les erreurs de segmentation sur une ligne qui fonctionne normalement comme prévu sur une installation GNU/Linux. Ce que je fais est de créer un pointeur sur une structure et de passer ensuite le pointeur sur une fonction comme un pointeur vide, puis de le recréer dans la fonction.passant un pointeur struct à une fonction segfault C FREEBSD
ex:
typedef struct
{
int i;
}some_struct;
int main()
{
some_struct *test = malloc(sizeof(some_struct));
test->i = -1;
function(test);
return 0;
}
void *function(void *prarm)
{
some_struct test = *((some_struct *)param); //segfaults on this line.
free(param);
return NULL;
}
Sur mon GNU/Linux installer cela me permettra de recréer la struct avec les données de pointeur transmis localement dans la fonction et me permettent de libérer la mémoire ed malloc
de main()
mais sur FreeBSD ça fait des failles et je ne sais pas pourquoi.
Si je casse à function
dans gdb
et tapez
p *(some_struct *)param
Il imprime avec succès ma struct commande qui est créée à partir du pointeur et toutes ses variables de l'intérieur de la fonction. Je ne comprends pas pourquoi cela fonctionne GNU/Linux et segmente sur mon machine de test FreeBSD.
Merci pour toute aide pour ce problème que j'ai.
La publication d'indicateurs GCC (ou CLang?) Serait également utile. – 9000
Ce n'est pas le vrai code. Le problème est dans une autre partie que vous avez omise. – cnicutar
Ce code ne compile même pas, et en fait, le cmd d'impression 'gdb' que vous avez cité utilise un nom de structure complètement différent de votre code affiché. S'il vous plaît poster le * real * code qui présente le problème. – WhozCraig