Accueil > Forum > > > > Probleme violation de la mémoire
Probleme violation de la mémoire
jeudi 11 octobre 2007 à 21:11:46 |
Probleme violation de la mémoire

BrokenArrow29
|
Bonjour, j'obtiens cette erreur lorsque j'éxécute un petit programme : " L'exception System.AccessViolationException n'a pas été gérée
Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée." Détail: System.AccessViolationException" Le programme lit une base de donnée et cherche le correspondant dans une autre base de donnée. L'erreur n'arrive jamais au meme endroit ou au meme enregistrement. Parcontre elle arrive toujours lorsque par une fonction (contenu dans un dll qui est en référence) attribue une valeur a une variable. C'est un peu weird ... Merci de votre aide 
|
|
jeudi 11 octobre 2007 à 21:14:19 |
Re : Probleme violation de la mémoire

GEDDi
|
Ya fort à parier que ça vienne de la DLL, genre mémoire mal allouée, libération de mémoire anticipée, tentative d'acces à une zone mémoire qui a déjà été effacée mais dont le pointeur n'a pas été mis à NULL, ce genre de choses codées par des gruic gruiiic :) Gérôme GUILLEMIN Auteur du langage FBSL
|
|
jeudi 11 octobre 2007 à 21:52:36 |
Re : Probleme violation de la mémoire

casy
|
Moi je parirais plus pour un problème d'appel à la dll. Je ne pense pas que ce soit la dll qui est en cause, mais plutot la façon dont tu t'en sert. ---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE # [ Lien ]
|
|
jeudi 11 octobre 2007 à 22:48:12 |
Re : Probleme violation de la mémoire

BrokenArrow29
|
c'est que l'appel de la fonction (qui est storé dans la dll ) est dans une boucle qui va tournée autant fois qu'il ya des donnée dans la bd (genre 5 000 fois). Mais elle va donnée l'erreur des fois Exemple au 3000ieme enregistement sur le champ B et d'autre fois au 2800ieme sur un autre champ. Les fois d'avant elle fonctionne bien... Il semble pas avoir de relation avec le champ ou la donnée lu. Sa me semble comme si y aurais pas de mémoire disponible additionnelle. Pourtant j'ai 2gig de mémoire.
|
|
jeudi 11 octobre 2007 à 22:53:35 |
Re : Probleme violation de la mémoire

casy
|
Tu es en VB2005, comment déclare-tu les fonctions de ta dll ??? Il se peut que le type de variable que tu lui passe ne corresponde pas à ce qu'elle attent. Autre point, est-ce que tes variables sont correctement instanciées avant de les passer à la dll. Ex, si tu lui passe une chaine de caractère qu'elle doit remplir, cette chaine doit au préalable etre correctement remplie avec suffisament de caractères pour qu'elle existe en mémoire. Le mieux est que tu mette le bout de code qui pose problème. ---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE # [ Lien ]
|
|
vendredi 12 octobre 2007 à 18:21:35 |
Re : Probleme violation de la mémoire

BrokenArrow29
|
Voila ma déclaration de la fonction de la dll
PublicDeclareFunction TDBFieldGetValueAsString Lib"F:\filedll\tdbaccess.dll" (ByVal DBIndex AsInteger, ByVal TableName AsString, ByVal FieldName AsString, ByVal RecNo AsInteger, ByRef OutBuffer AsString) AsBoolean
Variable déclarer dans ma procedure
Dim
PLAYERFIRST
As
String
=
"" Dim PLAYERCITY AsString = "" Dim PLAYERLAST AsString = "" Dim PLAYERindx AsInteger = 0
'PARTIE DE CODE
'HandleEXH est mon fichier ouvert de base de donnée. For I = 0 To (TABLEINFO.RecordCount - 1) TDBFieldGetValueAsString(HandleEXH, "SPBT", "FNME", I, PLAYERFIRST) TDBFieldGetValueAsString(HandleEXH, "SPBT", "LNME", I, PLAYERLAST) TDBFieldGetValueAsString(HandleEXH, "SPBT", "CITY", I, PLAYERCITY) TDBFieldGetValueAsString(HandleEXH, "SPBT", "INDX", I, PLAYERindx)
L'erreur peut arriver a n'importe quelle ligne des fonction TDBfield.. c'est aléatoire jusqu'a maintenant. Et sur n'importe quel enregistrement(la valeur de I est différence a chaque erreur.) La fonction TDBfield lit une valeur dans la table SPBT, sur le champ FNME etc. à l'enregistrement I et la place dans la variable au bout ex: PLAYERFIRST.
Voilà je ne sais pas si vous avez assez d'info pour m'aider Merci!!!!!.
|
|
vendredi 12 octobre 2007 à 20:44:34 |
Re : Probleme violation de la mémoire

casy
|
Réponse acceptée !
ALors déjà effectivement, comme je disais, tu n'instancie pas correctement tes string avant l'appel. Certes tu les instancies mais de longueur nulle. C'est à dire qu'aucune place n'est réservée en mémoire pour contenir la chaine de caractère. Hors il est probable que ta dll ne soit pas capable de créer une string en mémoire, elle doit juste se contenter (comme la quasi totalité des dlls api) de remplir une zone mémoire déjà occupée par la string à remplir. Dans ce cas là, avant de passer la string à la fonction, il faut veiller à ce que une zone mémoire suffisament grande est effectivement occupée par la dite string, c'est à dire que la string soit de longueur suffisament importante pour acceuillir sa nouvelle valeur. Dans ton cas, si tant est que ce soit ça le problème, il faut que avant chaque appel, tu initialise chacune des strings avec suffisament de caractères pour que la zone réservée en mémoire soit suffisament grande. Ce qui donnerais le code suivant :  Dim PLAYERFIRST As String Dim PLAYERCITY As String Dim PLAYERLAST As String Dim PLAYERindx As Integer = 0
'PARTIE DE CODE
'HandleEXH est
mon fichier ouvert de base de donnée. For I = 0 To (TABLEINFO.RecordCount - 1)
PLAYERFIRST = New String(vbNullChar, 100) PLAYERLAST = New String(vbNullChar, 100) PLAYERCITY = New String(vbNullChar, 100) PLAYERindx = New String(vbNullChar, 100)
TDBFieldGetValueAsString(HandleEXH, "SPBT", "FNME", I, PLAYERFIRST) TDBFieldGetValueAsString(HandleEXH, "SPBT", "LNME", I, PLAYERLAST) TDBFieldGetValueAsString(HandleEXH, "SPBT", "CITY", I, PLAYERCITY) TDBFieldGetValueAsString(HandleEXH, "SPBT", "INDX", I, PLAYERindx)
Next
 Autre problème possible : Il te faut vérifier que la ligne de déclaration de ta dll correspond bien à une déclaration pour VB2005 et non pas VB6. En effet entre VB6 et VB2005, le type de variable a changé. Ainsi les integer (vb6) deviennent des short (ou Int16) en VB2005, les longs deviennent des integers. Si donc ta déclaration avec des integers est prevu ppour VB6, pour l'utiliser avec VB2005, il te faut remplcer les integer par des shorts ou des Int16. En espérant ne pas t'avoir trop embrouiller ---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE # [ Lien ]
|
|
vendredi 12 octobre 2007 à 21:25:14 |
Re : Probleme violation de la mémoire

BrokenArrow29
|
Merci, Merci ca fonctionne tres bien lorsque j'initialise la variable a chaque tour. C'est un détail que j'avais vue.
J'ai perdue une semaine à fouiller et changer mes procedures pour que tu me fasse découvrir qu'il fallait initialiser la variable a chaque tour de la routine pour la dll peuvent y inclure l'info.
Mais est ce type a visual studio 2005 ou si je l'avais fais en Vb6 ca aurait fonctionner sans l'initialiser a chaque tour ?
|
|
vendredi 12 octobre 2007 à 21:42:16 |
Re : Probleme violation de la mémoire

casy
|
Ca aurait été exactement pareil en VB6, c'est d'ailleurs comme ça que l'on fait lorsque l'on utilise les fonctions de l'api Windows. Ceci est dû à la spécificité des variables de type string. Pour la pluspart des variables simples, ta variable dans le code représente une zone mémoire ou est réellement stocké la valeur de ta variable. Dans le cas des strings, la variable dans le code représente en mémoire, non pas une zone ou est stocké la chaine de caractère, mais une zone ou est stocké l'adresse d'une autre zone mémoire qui elle contiendra réellement la chaine de caractère. Dû au fonctionnement du traitement des string, cette derbière zone change en permanence de place, il est donc plus facile de stocké dans une variable fixe l'adresse d'une zone mémoire plutot que de modifier en permanance la position de cette variable et ainsi planter le programme qui aurait du mal à retrouver cette variable. Pour ce qui est des dll, comme je te disais, généralement elles ne sont pas capable de créer de zone mémoire ou stockées les chaines. Elles ne font que copier les caractères dans une zone qui leurs a été indiqué. Mais si cette zone n'existe pas (string de longueur nulle par exemple) ou qu'elle est trop courte, la dll n'est pas capable de le savoir et va allègrement déborder sur les données qui suivent en les détruisant. Ces données étant corrompues, cela provoque soit un plantage, soit des erreurs, soit des violation d'accès. C'est pour cela que lorsque tu passe une chaine de caractère à une dll de ce type qui doit y écrire dedant, cette chaine doit avoir au préalable été remplie pour qu'elle ait une longueur au moins égale (mais de préférence plus) que le nombre de caractères que va écrire la dll. ---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE # [ Lien ]
|
|
vendredi 12 octobre 2007 à 22:32:35 |
Re : Probleme violation de la mémoire
|
Cette discussion est classée dans : programme, erreur, probleme, mémoire, violation
Répondre à ce message
Sujets en rapport avec ce message
un probleme d'installation en vb6 [ par boris ]
bonjour,j'ai fait un petit programme en vb6 (je débute...) qui se sert de textbox(s) pour faire une page web avec des frames.Sur windows 98se pas de p
Problème d'execution : Erreur [ par mafiacom ]
Bonsoir la liste,Desole du derangement mais g un probleme et g cherche partout sans trouver d resultat :( si qq peut m'aider je lui serai hyyyyyyyper
Mémoire insuffisante : Erreur N° 7 [ par VbKenza ]
J'essaie de lancer un programme mais winXP me met une erreur "erreur d'exécution '7' : mémoire insuffisante". J'ai testé la mémoire (256 Mo quand même
Probleme avec date dans MySQL [ par knabis2000 ]
Bonjour à tous,Je suis devant une erreur bien mystérieuse , et j'aurai besoin de votre aide pour la résoudre. Explication : Dans un programme en VB6,
probleme erreur connexion extraputty [ par fifati ]
donner le solution de probleme connexion extraputty'tentative le lecture ou d'ecriture de mémoire protégée.cela indique souvent q'une autre mémoire es
Probleme de droit d'administration dans mon programme [ par poolboy2 ]
Bonjours à tous, Je vais essayer d'expliquer ici mon problème et j'espère que vous aurez une solution [^^langue3] Je développe un programme doté d'u
Erreur à la sortie de ma fonction [ par narfight ]
Bonjour tout le monde, J'ai un problème que je n'arrive pas à comprendre et encore moins à résoudre. dans mon programme, je fais une écoute de donné
probleme de publier un projet avec clickonce [ par lassad_haddaji ]
Bonjour, J'ai développé un projet et je souhaite utiliser clickOnce pour le déployer. J'utilise déjà cette méthode de déploiement avec des application
Livres en rapport
|
Derniers Blogs
DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|