Anomalie #319
"Segmentation fault" avec fct nD pour V >= 7.000
Ajouté par Frank Petitjean il y a plus de 2 ans.
Mis à jour il y a plus d'un an.
Description
Bonjour Gérard,
Julien a développé un modèle avec une loi HYPER_EXTERNE_W qui utilise une fonction nD assez complexe. Sa fonction nD passe bien sur la version 6.996 mais entraine un Segmentation fault sur les versions >= 7.000.
Indication : en commentant les 3 dernières lignes de la fct elle est bien lue (attention au caractère "\" ). Est-ce un pb de dimension ?
Je te joins le fichier de Julien.
Merci
Frank
Fichiers
- Statut changé de Nouveau à En cours
- % réalisé changé de 0 à 20
Bonjour Frank,
effectivement sur la dernière version compilée avec linux, il y a une erreur de segmentation avec les deux versions.
Par contre avec la version actuelle sur mac, pas d'erreur ??
bon, je refais une compil pour voir ??
bon, et bien cela plante toujours avec la version linux (non fast) ... contrairement avec celle de la version osx ??
As-tu des liens d'intérêt avec Apple ? Je vais être obligé de changer d'OS si tu ne trouves pas ;-). Je suis curieux de savoir ce qui se passe !
C'est moins riche et moins intéressant que les problèmes de lois de comportement soulevés par Julien.
Frank
non non non .... pas de lien avec popaul
bon, je suspecte un pb d'I/O sur la lecture de fichier...
Je vais débugger en linux ...
- % réalisé changé de 20 à 90
Frank
effectivement ton intuition était la bonne, c'était un pb de dimensionnement.
Au niveau de la lecture (class UtilLecture) j'utilise un tableau intermédiaire de caractère qui était dimensionné à 1500, c-a-d que je considérais qu'à priori, un enregistrement ne faisait pas plus de 1500 caractères.
Dans le .info, jusqu'à présent aucune ligne ne dépassait 1500 caractères.
Mais ... pour les fonctions analytiques ND, je lis en une seule fois, l'expression de la fonction, et dans le cas de la fonction proposée par julien, on dépasse 1500 !!
Donc j'ai passé à 2500 et c'est ok.
Je recompile les versions linux (version 7.002)... il faudra faire attention car ce sont des versions provisoires car plusieurs choses sont en chantier !!
Gérard,
je réveille ce vieux ticket. J'ai récemment écrit une fonction nD dans HYPER_EXTERNE_W qui fait entre 3600 et 3700 caractères. Du coup, la limite de 2500 me provoque des problèmes aléatoires. Des fois ça marche, d'autres cas j'ai des erreurs malloc, ou des seg fault, etc...
est-ce possible de passer à 5000 voire 10000 pour être sûr ? quelle serait la contre-indication à mettre un grand chiffre ?
Durant la lecture j'utilise des tableaux intermédiaires qui sont dimensionnés avec la taille maxi. Du coup, je ne pense pas que ce soit une bonne idée d'utiliser des tableaux avec une très grande taille.
Une solution qui me paraît plus sage est de mettre en place une lecture en plusieurs tranches, chaque tranche devant-être inférieure à la limite (actuellement 2500) mais le nombre de tranches pouvant-être quelconque...
Une tranche de 2500 caractères me semble déjà correcte en particulier en terme de lisibilité (= compréhension de la fonction...mais effectivement on peut être certaine fois limitée.
Je pense que c'est déjà possible via une combinaison de fonction nD, chacune lisant une fonction ayant moins de 2500 caractères.
à essayer ...
ok.
Le pb de mes fonctions est qu'il y a des cas particuliers et donc il faut répéter plusieurs fois la formule pour gérer certains cas (utilisation de tournures : "test ? fct1 si oui : fct2 si non")
pour l'instant, je vais faire un script qui essaye de minimiser le nombre de caractères en gérant les cas avant d'écrire la fonction nD.
(et enlever au maximum les espaces qui doivent compter pour un caractère)
Formats disponibles : Atom
PDF