Aller au contenu


[mwedit] "no More Room For Zero Pointers"


  • Veuillez vous connecter pour répondre
10 réponses à ce sujet

#1 alliop

alliop

    Renaissance de l'art magique.


Posté 27 février 2009 - 17:40

Mes salutations aux spécialistes du codage low level.

Récemment, des esp traités avec MWEdit sous Windows Vista (oui oui, je sais, je sais... ^^) m'ont produit à la création de partie un crash avec ce message d'erreur : "no more room for zero pointeurs".
L'étrange est que les mêmes travaux (exactement) recopiés sous tesc ne produisent pas cette erreur.

Broutant un peu internet je me suis fait une idée de ce qu'est le "pointeur nul" en langage C. (En bref il s'agit de quelque chose comme un référencement d'adresse de variable permettant de l'utiliser comme si elle avait plusieurs valeurs simultannées dans des opérations chaînées du genre tableaux, si je ne dis pas d'annerie.)

Je flippe un poil, considérant deux faits :
1) MWEdit semble poser des limitations très en-deça de celles du tesc : c'est constatable dans les fenêtres de dialogue, qui sous MWEdit n'acceptent qu'environ le tiers du nombre de caractères acceptés par le tesc.
2) l'ensemble d'esp sur lesquels je travaille sous forme de patching totalise déjà 226 globales ajoutées (Ascension 92, Progression Maitrisée 50, Nova Magica V2 84 ; en outre Ascension déclare à la création du perso quelque chose comme 900 locales qui restent stockées donc 72 heures avant de disparaître des saves).

Tenant compte du seuil différent des limitations, le message d'erreur de MWEdit serait-il prémonitoire de ce qui risque d'arriver sous tesc?

Où, au juste, manque-t-il "de la place pour les pointeurs nuls"?

Bref est-ce un bug spécifique de MWEdit ou quelque chose de plus inquiétant à court-terme.

Si vous avez quelque idée là dessus, merci :ortholiberaux:

Modifié par alliop, 27 février 2009 - 17:41.

"Bienvenue à toi, lent homme lié, poussif tresseur des vitesses."
Alain Damasio


#2 Finraïl

Finraïl

    Modèle de wiwilandais nanotechnologique


Posté 27 février 2009 - 21:04

Difficile à dire sur ce programme en béta. Les plus à mêmes de répondre sont probablement les concepteurs. Néanmoins à la vue des différentes limitations de MWEdit sur les fenêtres de dialogues, les longueurs d'ID, il ne serait pas étonnant que le nombre de globales soit lui aussi limité.

Ton esp sauvé dans MWE est exactement le même une fois ouvert sous le TESCS ou il te manque des choses ? Il te manque peut être une globale, ou quelque chose de ce genre...

Not Quite Dead, le 22.06.2006 à 19:42, dit :

[...]un changement avatarien, même infime, est PAS BIEN et nuisible [...]
Les lisez-moi c'est bon, mangez-en !! Image IPB

Fervent Partisan de l'Immuabilité Avatarienne.

Morrowind Renaissance


#3 elendell

elendell

    Mécano Dell'Arte


Posté 27 février 2009 - 22:37

Bonjour alliop,

J'ai eu une fois le même message d'erreur (en n'ayant utilisé que le Tescs). Le script responsable n'avait aucune erreur à la compilation et le "no more room for zero pointeurs" n'était pas systématique en jeu.

Je ne me souviens plus exactement de l'origine mais ce n'était pas dû à une limitation de variables. Il s'agissait d'une erreur dans un calcul mathématique. Un résultat intermédiaire se produisait dans certains cas alors qu'il était mathématiquement impossible. C'était un calcul qu'on ne pouvait pas faire sur 0 et dans certains cas, mon calcul s'appliquait sur une variable qui était à 0.

Si tu as des scripts qui font des calculs de maths, essaye de suivre cette piste. Si besoin, je chercherai dans mes archives pour retrouver le problème exact (que j'avais résolu avec une simple condition empêchant le calcul si la variable était à 0).

EDIT : En relisant je me demande s'il s'agissait bien du même message d'erreur que j'avais eu (ma mémoire n'est plus toute jeune  :banderilles: ).
Mais c'est à vérifier quand même à tout hasard...

#4 alliop

alliop

    Renaissance de l'art magique.


Posté 01 mars 2009 - 05:35

Merci de vos réponses.

"Finrail" dit :

Ton esp sauvé dans MWE est exactement le même une fois ouvert sous le TESCS ou il te manque des choses ? Il te manque peut être une globale, ou quelque chose de ce genre...
L'esp qui fonctionne n'est pas "le même sauvegardé sous tesc" (celui-là ne fonctionne pas non plus), mais un clone réalisé sous tesc (ce n'était que 2 ou 3 scripts et il n'ajoutait qu'une seule globale).
D'autre part si des globales manquent elles sont correctement signalées par Morrow avec un message d'erreur "poursuivre le chargement / oui / non / annuler".

"elendell" dit :

un calcul qu'on ne pouvait pas faire sur 0 et dans certains cas, mon calcul s'appliquait sur une variable qui était à 0.

Si tu as des scripts qui font des calculs de maths, essaye de suivre cette piste. Si besoin, je chercherai dans mes archives
Merci, ce n'est pas nécessaire :shocked:
Aucun des 3 scripts de cet esp ne comporte un calcul comportant une globale susceptible de passer à 0 en diviseur, ni dans Nova, ni dans Ascension, ni dans les alphas de MR (et aucun calcul d'un autre niveau de math que basique).
Mais merci de nous mettre cette puce à l'oreille, le cas peut se présenter!  :huhu:

*****

Je pense que c'est bien un bug spécifique de MWEdit.
J'ai re-testé le même patch révisé (3 scripts, aucune globale ajoutée) en ne lui donnant comme masters que les 3 esm Beth et Nova-base (pas même le pnog), le même message d'erreur se produit.

Le message très exact est (en respectant la casse!!^^) :

"Le Tesc" dit :

not enough room for zero pointers in Script::ReplaceGlobalsInData
Cette messagebox apparait au format windows avec un ctd en création de partie; si l'esp est chargé sur une save, le message est "no more room for zero pointers" dans une messagebox au format du jeu.

Je suppose que le script "ReplaceGlobalsInData" est un script du moteur, mal renseigné par je ne sais quelle bidouille de MWEdit.
Je me demande s'il n'injecte pas dans l'esp quelque fonction de compilation qui devrait normalement s'appliquer à des scripts MWSE puisqu'il les traite aussi, mais c'est une pure spéculation sans fondement réel.

Au final, je pense que c'est une erreur due à une compatibilité difficile entre MWSE et Vista. Cette spéculation est un tout petit peu plus fondée : le débugeur de Nenfea fait n'importe quoi sous ma version de cette... ce... truc pas fini ; il doit manquer quelque bibliothèque de DLLs, peut être....

"Bienvenue à toi, lent homme lié, poussif tresseur des vitesses."
Alain Damasio


#5 Finraïl

Finraïl

    Modèle de wiwilandais nanotechnologique


Posté 01 mars 2009 - 09:22

Voir le messagealliop, le 01.03.2009 à 05:34, dit :

le débugeur de Nenfea fait n'importe quoi sous ma version de cette... ce... truc pas fini ; il doit manquer quelque bibliothèque de DLLs, peut être....
le débuggueur ne fonctionne en l'état que sous XP SP2. Pour une version SP1 ou pour Vista, faut recompiler.

Not Quite Dead, le 22.06.2006 à 19:42, dit :

[...]un changement avatarien, même infime, est PAS BIEN et nuisible [...]
Les lisez-moi c'est bon, mangez-en !! Image IPB

Fervent Partisan de l'Immuabilité Avatarienne.

Morrowind Renaissance


#6 elendell

elendell

    Mécano Dell'Arte


Posté 01 mars 2009 - 19:06

"Le Tesc" dit :

not enough room for zero pointers in Script::ReplaceGlobalsInData
J'ai trouvé deux références à ce message d'erreur. Je comprends trop mal l'anglais pour dire si c'est intéressant et tu les connais peut-être mais à tout hasard...

La première est sur <ce site> :

Citation

In the 'Operators' section in SFD 8, Ghan talks about limits on the maximum number of variables that can be used in a single 'Set' statement.

Here's what I came up with:

Eleven variables in a single set statement will cause the following error when loading the game, followed by a crash to desktop:

"Need more room for zero pointers in Script::ReplaceGlobalsInData"; as soon as you click the button to acknowledge the error, CTD. (That script name wasn't any script of mine; apparently it's something internal to the game.)

Six variables in a Set statement work fine. Don't know the maximum number, but it's obviously at least six and definitely less than eleven.

La deuxième est sur le MSfD9, page 30. (Celle du site est sans doute un extrait du MSfD9).

#7 alliop

alliop

    Renaissance de l'art magique.


Posté 01 mars 2009 - 20:00

Merci :)

Oui, j'ai potassé ce site (enfin je croyais^^) et le mfsd, pourtant.... mais la lecture de l'anglais me demande aussi un effort vraiment fatiguant.

Il est probable (je crois même me souvenir mais ce bug est vieux de 3 mois maintenant) que j'ai lu ces infos mais ne les ai par retenues, car la cause ne peut pas être celle là non plus : les scripts incriminables de l'esp ne comportent aucune opération complexe impliquant des variables, et j'ai de toute façon tendance à décomposer toutes les opérations plutôt qu'à les chainer en une (surtout avec des globales, dont je fais systématiquement transiter les valeurs par des locales... justement suite à cette lecture du forum de Yacobi!).

EDIT : en fait je comprends mal ce qu'est "un seul set statement"... je l'interprète sa "limitation à 11 variables dans un seul set statement" comme "une mise à jour de variable par une opération à 11 variables" sous "set".
Si ce n'est pas ce sens, voilà ce que cet esp fait de "pire" en termes de "set" et de variables :
set P_Agi to ( "Player"->GetAgility )
set P_endu to ( "Player"->GetEndurance )
set P_Inte to ( "Player"->GetIntelligence )
set P_Luck to ( "Player"->GetLuck )
set P_pers to ( "Player"->GetPersonality )
set P_Spee to ( "Player"->GetSpeed )
set P_Stren to ( "Player"->GetStrength )
set P_Will to ( "Player"->GetWillpower )

set Test_AttribPJ to P_Agi
set Test_AttribPJ to ( Test_AttribPJ + P_Endu )
set Test_AttribPJ to ( Test_AttribPJ + P_Inte )
set Test_AttribPJ to ( Test_AttribPJ + P_Luck )
set Test_AttribPJ to ( Test_AttribPJ + P_Pers )
set Test_AttribPJ to ( Test_AttribPJ + P_Spee )
set Test_AttribPJ to ( Test_AttribPJ + P_Stren )
set Test_AttribPJ to ( Test_AttribPJ + P_Will )

Et je ne résiste pas à copier un script de Galsiah pour Ascension, qui vaut son pesant de cacahuètes! :
Spoiler
... et il y en a une 15aine dans le genre, et ça ne bugue pas (mais d'accord, lui c'est Galsiah!  :green: )

Modifié par alliop, 01 mars 2009 - 20:16.

"Bienvenue à toi, lent homme lié, poussif tresseur des vitesses."
Alain Damasio


#8 Vasumitra

Vasumitra

Posté 01 mars 2009 - 22:58

Citation

Eleven variables in a single set statement will cause the following error when loading the game, followed by a crash to desktop:

Traduction : Onze variables dans un même "set" l'erreur suivante quand on chargera le jeu, suivit par un crash et un retour au bureau (pour le "et un retour au bureau" c'est la traduction de "to desktop" littéralement "au bureau" ou "vers le bureau"

en traduction, si il y a trop ( > 10 ) variables dans un set, ça crash.
J'étais déjà tombé sur ça dans ce manuel.
Bon, maintenant, avec ce que tu nous a dit, tu n'as pas ça dans tes script.
Je ne pense pas que ça vienne des script de base de morrowind mais ... est-ce que le jeu marche sans au moins ?

Bon, j'espère que tu t'en sortira ...

#9 elendell

elendell

    Mécano Dell'Arte


Posté 02 mars 2009 - 01:52

Voir le messagealliop, le 01.03.2009 à 19:59, dit :

EDIT : en fait je comprends mal ce qu'est "un seul set statement"... je l'interprète sa "limitation à 11 variables dans un seul set statement" comme "une mise à jour de variable par une opération à 11 variables" sous "set".
Je l'interprète aussi comme ça mais je m'interroge (car je ne connais pas le traitement informatique des variables) :

Et si une variable globale n'était pas mise à jour au fur et à mesure de chaque ligne du script qui agit sur elle mais uniquement à la fin de la frame ? Cela ferait peut-être la même chose ( en stockages intermédiaires) qu'une opération à 11 variables. (D'où le "not enough room").

Tu ne précises pas si tes variables sont des globales ou locales. Certes, il y a moins de 11 opérations sur "Test_AttribPJ" mais il peut aussi y avoir une limitation de MWEdit qui ferait dans ce cas ressortir ce problème plus tôt.

Je note que dans le script de Galsiah, "runningTotalSkills" est une variable locale. Cela fonctionnerait-il aussi bien si c'était une globale ?

#10 alliop

alliop

    Renaissance de l'art magique.


Posté 02 mars 2009 - 09:41

Hello (le soleil brille, brille, brille.... nan c'est pas vrai :mrgreen: )

@Elendell : ce sont des locales (je n'utilise jamais de globales en direct dans ce genre de cas).

Je viens de faire une série de tests en variant les syntaxes et les opérations, il semble bien que c'est MWEdit qui bugue sous ma config (j'ai déjà fait une réinstal complète du jeu et de MWEd, ça ne change rien).

Je vous passe les détails... en conclusion les deux script suivant passent très bien sous tesc (sous MWEdit non, mais une simple ligne de mise à jour de globale sur une locale set à 1 non plus, d'où ma conclusion ci-dessus) :

Spoiler

Encore merci à vous, s'il se passe du nouveau dans la suite de cette aventure je vous dirai :hum:

"Bienvenue à toi, lent homme lié, poussif tresseur des vitesses."
Alain Damasio


#11 alliop

alliop

    Renaissance de l'art magique.


Posté 19 juillet 2009 - 23:41

*******************
20/07, 00:36
*******************

L'aventure continue, grâce aux familiers.

Ayant modé ce coup-ci sous XP et obtenant le même message, ça ne vient pas d'une incompatibilité MWEdit/Vista.

L'hypothèse du moment qui me semble la plus probable est que le bug est causé dans MWEdit par l'utilisation de la fonction "clean" sans "delete" préalable.
Il faudrait que je fasse un test spécifique pour le prouver, mais franchement, tout à fait entre nous nonobstant le caractère public de ce vénérable forum, j'ai une flemme noire de me coltiner ce genre de connerie en ce moment.  :rolleyes:

"Bienvenue à toi, lent homme lié, poussif tresseur des vitesses."
Alain Damasio





0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)