Bonjour à tous,
Je travaille sur une appli structurée ainsi :
appli <--> DLLprincipale <--> DLLutilisateur
La majeure partie du code de l'appli est dans la DLL principale. Il y a une bibliothèque que l'utilisateur peut écrire et compiler lui-même pour récupérer le résultat de son calcul perso.
j'appelle donc cette fonction depuis la DLLprincipale :
Code :
- int CalculerVariableUtilisateur(float x, float y, float z, float *pR, int nbVar,
- int i, int j, int k, int numVar, float *pV)
|
où tous les paramètres sont des entrées sauf le dernier, pV qui est le résultat du calcul.
l'int de retour est un code erreur.
Ce pointeur pV pointe sur un tableau alloué dans la DLL principale.
Dans la DLL utilisateur on fait :
par exemple.
et voici l'appel :
Code :
- codeErreur = CalculerVariableUtilisateur((*pP)[0], (*pP)[1], (*pP)[2],
- pRU, nbVarU,
- i+1, j+1, k+1,
- numVarU,idDomain, pV);
|
Le souci c'est que l'appel de cette fonction me donne ceci vu depuis la lib utilisateur:
Code :
- CalculerVariableUtilisateur(x = 10.0, y = 0.0, z = 10.0, pR = 0x10252b4c0, nbVar =
- 5, i = 1, j = 1, k = 1, numVar = 6, pV = 0x1)
|
l'adresse de pV est bidon. Pourtant la fonction est correctement appelée, la mémoire correctement allouée. Et ca plante, évidement. Pourtant pR a bien une adresse correcte... c'est à n'y rien comprendre.
Je me demande si ce n'est pas un souci de flags de compilation et une sombre histoire de pile et de tas. Ou de dépassement mémoire, pourtant j'ai déjà recherché les fuites.
Message édité par kaloskagatos le 08-08-2008 à 10:16:25
---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »