OVH Cloud OVH Cloud

[WD8] Bug sur les tableaux et structures ?

7 réponses
Avatar
eric.babigeon
Bonjour à tous,

Le code suivant provoque chez moi une erreur.
Est ce la même chose chez vous ?
J'y perds mon latin...

*****************

stReponse1 est une structure
nNumero est un entier // Numéro de réponse (de 1 à 4)
szBonne est une chaîne // "1" si la réponse est bonne, "0" sinon
szTxtReponse est une chaîne // Texte de la réponse
FIN
stQuestion1 est une structure // Structure de page Question
nNumero est un entier // Numéro de la question
nbReponses est un entier // Nombre de réponses
tabReponse est un tableau dynamique // Tableau des réponses
FIN



LOCAL
nPage est un entier // N° de la page de question
nReponse est un entier // N° de la réponse au questions
stQues est un stQuestion1 // Structure temporaire
stRep est une stReponse1 // Structure temporaire
tabPages est un tableau dynamique


tabPages = allouer un tableau dynamique de 0 stquestion1
stQues:tabReponse=allouer un tableau de 0 streponse1


nPage=1
SI Dimension(tabPages)<nPage ALORS
Dimension(tabPages,nPage)
FIN
stQues:nNumero=nPage
stQues:nbReponses=0


stRep:nNumero=50

// Ajout de la réponse au tableau des réponses de la page
stQues:nbReponses++
Dimension(stQues:tabReponse,stQues:nbReponses)
stQues:tabReponse[stQues:nbReponses]=stRep

// On enregistre la question dans le tableau des pages
n=Dimension(stQues)
// Transfert(&tabPages[nPage],&stQues,n) -->>>> cette ligne provoque une GPF
tabPages[nPage]=stQues

// Le tableau tabPages[nPage]:tabReponse est maintenant de taille 1.
// Vérifions ...
Info(Dimension(tabPages[nPage]:tabReponse))

// Vérification du contenu
Info(tabPages[nPage]:tabReponse[1]:nNumero)

// On remet à 0 la taille du tableau de notre variable temporaire
Dimension(stQues:tabReponse,0)

// Quel rapport ?
// Et pourtant, le tableau tabPages[nPage]:tabReponse a changé ...
Info(Dimension(tabPages[nPage]:tabReponse))


stQues:nbReponses=0

*******************

7 réponses

Avatar
pascal.roy
Bonjour

Je ne suis pas sûr que l'on puisse allouer un tableau de 0 éléments !
Peut-être en Wd8 ?

Pascal

Eric BABIGEON a écrit :
Bonjour à tous,

Le code suivant provoque chez moi une erreur.
Est ce la même chose chez vous ?
J'y perds mon latin...

*****************

stReponse1 est une structure
nNumero est un entier // Numéro de réponse (de 1 à 4)
szBonne est une chaîne // "1" si la réponse est bonne, "0" sinon
szTxtReponse est une chaîne // Texte de la réponse
FIN
stQuestion1 est une structure // Structure de page Question
nNumero est un entier // Numéro de la question
nbReponses est un entier // Nombre de réponses
tabReponse est un tableau dynamique // Tableau des réponses
FIN



LOCAL
nPage est un entier // N° de la page de question
nReponse est un entier // N° de la réponse au questions
stQues est un stQuestion1 // Structure temporaire
stRep est une stReponse1 // Structure temporaire
tabPages est un tableau dynamique


tabPages = allouer un tableau dynamique de 0 stquestion1
stQues:tabReponse=allouer un tableau de 0 streponse1


nPage=1
SI Dimension(tabPages)<nPage ALORS
Dimension(tabPages,nPage)
FIN
stQues:nNumero=nPage
stQues:nbReponses=0


stRep:nNumeroP

// Ajout de la réponse au tableau des réponses de la page
stQues:nbReponses++
Dimension(stQues:tabReponse,stQues:nbReponses)
stQues:tabReponse[stQues:nbReponses]=stRep

// On enregistre la question dans le tableau des pages
n=Dimension(stQues)
// Transfert(&tabPages[nPage],&stQues,n) -->>>> cette ligne provoque une GPF
tabPages[nPage]=stQues

// Le tableau tabPages[nPage]:tabReponse est maintenant de taille 1.
// Vérifions ...
Info(Dimension(tabPages[nPage]:tabReponse))

// Vérification du contenu
Info(tabPages[nPage]:tabReponse[1]:nNumero)

// On remet à 0 la taille du tableau de notre variable temporaire
Dimension(stQues:tabReponse,0)

// Quel rapport ?
// Et pourtant, le tableau tabPages[nPage]:tabReponse a changé ...
Info(Dimension(tabPages[nPage]:tabReponse))


stQues:nbReponses=0

*******************


Avatar
Yves.83
Oui on peut déclarer un tableau dynamique de 0 élément (même en WD55)
mais par contre peut-on déclarer un tableau dynamique de 0 ou x
'Structure'.

Je n'ai rien trouver qui confirmait ou infirmait celà.

Yves


a écrit dans le message de news:
cl8enp$6uk$
Bonjour

Je ne suis pas sûr que l'on puisse allouer un tableau de 0 éléments !
Peut-être en Wd8 ?

Pascal

Eric BABIGEON a écrit :
> Bonjour à tous,
>
> Le code suivant provoque chez moi une erreur.
> Est ce la même chose chez vous ?
> J'y perds mon latin...
>
> *****************
>
> stReponse1 est une structure
> nNumero est un entier // Numéro de réponse (de 1 à 4)
> szBonne est une chaîne // "1" si la réponse est bonne, "0" sinon
> szTxtReponse est une chaîne // Texte de la réponse
> FIN
> stQuestion1 est une structure // Structure de page Question
> nNumero est un entier // Numéro de la question
> nbReponses est un entier // Nombre de réponses
> tabReponse est un tableau dynamique // Tableau des réponses
> FIN
>
>
>
> LOCAL
> nPage est un entier // N° de la page de question
> nReponse est un entier // N° de la réponse au questions
> stQues est un stQuestion1 // Structure temporaire
> stRep est une stReponse1 // Structure temporaire
> tabPages est un tableau dynamique
>
>
> tabPages = allouer un tableau dynamique de 0 stquestion1
> stQues:tabReponse=allouer un tableau de 0 streponse1
>
>
> nPage=1
> SI Dimension(tabPages)<nPage ALORS
> Dimension(tabPages,nPage)
> FIN
> stQues:nNumero=nPage
> stQues:nbReponses=0
>
>
> stRep:nNumeroP
>
> // Ajout de la réponse au tableau des réponses de la page
> stQues:nbReponses++
> Dimension(stQues:tabReponse,stQues:nbReponses)
> stQues:tabReponse[stQues:nbReponses]=stRep
>
> // On enregistre la question dans le tableau des pages
> n=Dimension(stQues)
> // Transfert(&tabPages[nPage],&stQues,n) -->>>> cette ligne provoque une


GPF
> tabPages[nPage]=stQues
>
> // Le tableau tabPages[nPage]:tabReponse est maintenant de taille 1.
> // Vérifions ...
> Info(Dimension(tabPages[nPage]:tabReponse))
>
> // Vérification du contenu
> Info(tabPages[nPage]:tabReponse[1]:nNumero)
>
> // On remet à 0 la taille du tableau de notre variable temporaire
> Dimension(stQues:tabReponse,0)
>
> // Quel rapport ?
> // Et pourtant, le tableau tabPages[nPage]:tabReponse a changé ...
> Info(Dimension(tabPages[nPage]:tabReponse))
>
>
> stQues:nbReponses=0
>
> *******************


Avatar
Eric BABIGEON
Affirmatif.
On peut allouer un tableau de 0 éléments
On peut allouer un tableau de 0 structures

PS: je suis en version 315p.

J'ai trouvé une solution de contournement qui consiste à transférer chaque
élément de la structure, mais c'est contre-productif ...
Ca ressemble fort à un bug , non ?


a écrit dans le message de
news:cl8enp$6uk$
Bonjour

Je ne suis pas sûr que l'on puisse allouer un tableau de 0 éléments !
Peut-être en Wd8 ?



Avatar
Yves.83
Il me semble qu'il y a une erreur dans l'emploi de
la valeur retournée par dimension() dans la ligne
Transfert() , il lui faut un nombre d'octets et non
un nombre d'éléments.
Yves


"Eric BABIGEON" a écrit dans le message de news:
4177d065$0$31776$
Affirmatif.
On peut allouer un tableau de 0 éléments
On peut allouer un tableau de 0 structures

PS: je suis en version 315p.

J'ai trouvé une solution de contournement qui consiste à transférer chaque
élément de la structure, mais c'est contre-productif ...
Ca ressemble fort à un bug , non ?


a écrit dans le message de
news:cl8enp$6uk$
> Bonjour
>
> Je ne suis pas sûr que l'on puisse allouer un tableau de 0 éléments !
> Peut-être en Wd8 ?
>




Avatar
Eric BABIGEON
Bonjour Yves et merci de ta réponse.

Dimension renvoie un nombre d'octet dans le cas où il s'agit d'une variable
complexe (telle qu'une structure).
En revanche, j'ai identifié que c'est cette instruction qui provoque la GPF.
Je suis donc repassé (pour le test) à l'affectation directe.

Néanmoins, le bug persiste... (1+1=0 !!)

"Yves.83" a écrit dans le message de
news:417821f4$0$28793$
Il me semble qu'il y a une erreur dans l'emploi de
la valeur retournée par dimension() dans la ligne
Transfert() , il lui faut un nombre d'octets et non
un nombre d'éléments.
Yves


"Eric BABIGEON" a écrit dans le message de news:
4177d065$0$31776$
> Affirmatif.
> On peut allouer un tableau de 0 éléments
> On peut allouer un tableau de 0 structures
>
> PS: je suis en version 315p.
>
> J'ai trouvé une solution de contournement qui consiste à transférer


chaque
> élément de la structure, mais c'est contre-productif ...
> Ca ressemble fort à un bug , non ?
>
>
> a écrit dans le message de
> news:cl8enp$6uk$
> > Bonjour
> >
> > Je ne suis pas sûr que l'on puisse allouer un tableau de 0 éléments !
> > Peut-être en Wd8 ?
> >
>
>




Avatar
Yves.83
Oui exact, j'avais mal lu
Le problème vient peut être de l'assignation directe
dans un tableau dynamique.
Faudrait-il dimensionner le tableau cible avant ?
De toute façon je pense que ce n'est pas la
solution qui t'intéresse ?
Yves


"Eric BABIGEON" a écrit dans le message de news:
41785131$0$15179$
Bonjour Yves et merci de ta réponse.

Dimension renvoie un nombre d'octet dans le cas où il s'agit d'une


variable
complexe (telle qu'une structure).
En revanche, j'ai identifié que c'est cette instruction qui provoque la


GPF.
Je suis donc repassé (pour le test) à l'affectation directe.

Néanmoins, le bug persiste... (1+1=0 !!)




Avatar
Eric BABIGEON
Bonjours Yves

Oui effectivement, cela vient de là.

J'ai enfin eu une réponse de PC SOFT concernant ce problème. La solution est
d'affecter membre par membre les deux structures.
C'est ce que j'avais préssenti et réalisé, mais cela n'est pas satisfaisant
dans le cas où on veut faire évoluer la structure en rajoutant des membres.
En revanche, il faut bien dimensionner le tableau cible avant, sinon rien ne
marche. Mais en faisant l'affectation membre par membre, ce n'est qu'une
ligne à ajouter.

Bref, pour ma part, le sujet est clôt.

Merci à ceux qui ont répondu.

Eric

"Yves.83" a écrit dans le message de
news:4178fb7d$0$28583$
Oui exact, j'avais mal lu
Le problème vient peut être de l'assignation directe
dans un tableau dynamique.
Faudrait-il dimensionner le tableau cible avant ?
De toute façon je pense que ce n'est pas la
solution qui t'intéresse ?
Yves


"Eric BABIGEON" a écrit dans le message de news:
41785131$0$15179$
> Bonjour Yves et merci de ta réponse.
>
> Dimension renvoie un nombre d'octet dans le cas où il s'agit d'une
variable
> complexe (telle qu'une structure).
> En revanche, j'ai identifié que c'est cette instruction qui provoque la
GPF.
> Je suis donc repassé (pour le test) à l'affectation directe.
>
> Néanmoins, le bug persiste... (1+1=0 !!)
>
>