cs_ricolabrico
Messages postés4Date d'inscriptionvendredi 18 juin 2010StatutMembreDernière intervention10 mai 2011
-
9 mai 2011 à 13:26
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 2019
-
10 mai 2011 à 09:57
Bonjour amis programmeurs
J'ai un problème de tableau . J'ai une tableau (déclaré comme variable globale) que j'utilise lors d'un appel de fonction or sa valeur est modifiée alors qu'il n'y a pas de raisons:
voila le code:
Dim datavoies(7, 100) As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim datavoiestemp(7, 100) As Integer
datavoiestemp = passebas(datavoies)
End Sub
Private Function passebas(ByVal datavoiesautre)
For i = 1 To numdata - 1
datavoiesautre(1, i) = 1
Next
Return datavoiesautre
End Function
Oui l'utilité de ce code présenté comme ça est douteuse mais je l'ai simplifié pour la clarté mais l'architecture est identique.
Datavoiestemp prend bien les valeurs de datavoiesautre (normal!) en utilisant les valeurs de datavoies. MAIS POURQUOI datavoies EST IL MODIFIE? c'est la premiere fois que cela m 'arrive et cela me dépasse, j'ai pourtant bien mis byval dans la fonction.
Dim datavoiestemp(7, 100) As Integer
datavoiestemp=datavoies
datavoiestemp = passebas(datavoiestemp)
Cette forme donne le même résultats.
cs_ricolabrico
Messages postés4Date d'inscriptionvendredi 18 juin 2010StatutMembreDernière intervention10 mai 2011 9 mai 2011 à 13:43
essayez ça , c'est pareil:
Public Class Form1
Dim datavoies() As Integer = {3, 3, 4, 4, 4, 5, 6, 6}
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim datavoiestemp() As Integer
datavoiestemp = passebas(datavoies)
End Sub
eccsup
Messages postés77Date d'inscriptionjeudi 14 mai 2009StatutMembreDernière intervention14 novembre 2022 9 mai 2011 à 13:46
Salut,
En vbNet, l'affectation d'objet(checkBox, comboBox, tableaux...) se fait par reference, C'est a dire que si tu fait
monDeuxiemeTableau = monPremierTableau (et c'est le Cas ici), tu n'aura non pas deux tableau dans deux zones de memoires distincte, mais un seul tableau qui aura en fait deux noms différents...
Voila pourquoi, meme si tu utilise byVal, ton deuxieme tableau modifie la valeur de ton premier.
J'espère avoir été claire, bonne chance pour la suite.
eccsup
Messages postés77Date d'inscriptionjeudi 14 mai 2009StatutMembreDernière intervention14 novembre 2022 9 mai 2011 à 13:55
Normalement, ceci devrait marcher:
Private function passebas(byval datavoiesautres)
dim temp as Integer(datavoiesautres.length)
For i = 0 to 4
temp(i) = 1
Next
For i = 5 to dataVoiesautres.length - 1
temp(i) = dataVoiesautres(i)
next
return temp
end function
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_ricolabrico
Messages postés4Date d'inscriptionvendredi 18 juin 2010StatutMembreDernière intervention10 mai 2011 9 mai 2011 à 15:09
merci pour ces informations, je ne savais pas que tableau1=tableau2 associait le même tableau à deux nom différents.
Je suis pas sur que l'exemple proposé resolve mon problème.
En réalité, j'effectue un filtrage de données sur le tableau mais si le filtrage n'est pas concluant, il faut pouvoir retourner aux données d'origines. Voila pourquoi je voulais "archiver" les données d'origines, travailler sur une copie temporaire, si le filtre est bon, copier le temporaire dans l'archive, si le filtre n'est pas bon, garder l'archive du départ....
Il faut savoir que le tableau est trés long (mais c'est un détail)
Donc comment faire un nouveau tableau dans un nouvel espace mémoire avec un nouveau nom en copiant un premier tableau? un new quelquechose (comme un objet?)