J'appelle une DLL C à partir d'une application Delphi 2009 et je continue d'obtenir des erreurs lorsque la mémoire allouée par GetMem ou AllocMem est transmise à la DLL. La seule façon d'éviter ces erreurs était d'utiliser malloc de msvcrt.dll. Qu'est-ce que malloc fait que les routines de mémoire intégrées ne le sont pas, et comment puis-je faire fonctionner les fonctions intégrées? Je n'aime vraiment pas contourner le gestionnaire de mémoire intégré.Pourquoi mon programme arrête-t-il de se bloquer si j'appelle malloc au lieu de GetMem?
3
A
Répondre
4
Si la DLL tente jamais de libérer cette mémoire ou de manipuler autrement l'allocation de mémoire (par exemple développer/contracter), cela l'expliquerait. Le mélange de systèmes d'allocation de mémoire n'est pas recommandé.
0
Faites attention à la convention d'appel, stdcall ou cdecl .
Quel genre d'erreurs obtenez-vous? Il ne devrait pas y avoir de problèmes à moins que la DLL ne tente de libérer ou de réaffecter la mémoire que vous lui avez transmise, ce qu'elle ne devrait vraiment pas faire. –
D'accord, mais malheureusement "ne devrait pas être" et "n'est pas" sont des choses différentes, et beaucoup trop souvent ainsi. – qid
Merci pour la réponse. La DLL a une option pour prendre le contrôle de la mémoire et je l'utilisais. Je vais réécrire ma fonction pour garder le contrôle de la mémoire. –