Probleme lors de la suppression de pointeur
Bonjour a tous, ca doit etre une erreur pas tres compliquée, mais ca fait longtemps que j'ai pas fait de c++.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
#include <iostream>
#include "windows.h"
#include <stdint.h>
using namespace std;
void main()
{
typedef int32_t (_stdcall *Ni845xFindDevice)(char *, unsigned int *, unsigned int *);
typedef void (_stdcall *Ni845xStatusToString)(int32_t, uint32_t , int8_t *);
HINSTANCE LoadME = LoadLibrary(L"C:\\Windows\\System32\\Ni845x.dll");
Ni845xFindDevice nifunc = (Ni845xFindDevice) GetProcAddress(LoadME, "ni845xFindDevice");
Ni845xStatusToString nifunc2 = (Ni845xStatusToString) GetProcAddress(LoadME, "ni845xStatusToString");
char *pFirstDevice=new char[1024];
int8_t * output = new int8_t;
int32_t out1 = nifunc (pFirstDevice,NULL,NULL);
nifunc2(out1,36,output);
cout << output << endl;
delete [] pFirstDevice;
//delete output;
}; |
Aucun probleme avec la 1ere fonction que je recupere de la dll.
Par contre la 2e, qui traduit la réponse de la premiere me pose des problemes.
out1 est le truc a traduire, le 2nd argument, la taille du buffer de réponse, le 3e argument le pointeur ou va la réponse traduite.
Le probleme se situe sur le pointeur output (et peut etre sur la taille du buffer)
des que je decommente "delete output" j'obtiens ces erreurs
Code:
1 2 3 4
|
Windows a déclenché un point d'arrêt dans test2.exe.
Cela peut être dû à une défaillance du tas qui indique un bogue dans test2.exe ou l'une des DLL chargées. |
avec un magnifique
HEAP[test2.exe]: Heap block at 005550F8 modified at 00555125 past requested size of 25
Si j'enleve le delete tout va bien.
et 2e chose, si j'augment la taille du buffer a plus de 36, j'ai plein de
Violation d'accès lors de la lecture de l'emplacement 0xdddddddd.
mais la valeur output prend toujours une valeur cohérente apres la fonction, c'est toujours a la suppression, ou a la fin du programme quil y a un probleme.
La doc liée a la dll est la www.ni.com/pdf/manuals/371746c.pdf si vous voulez plus de détails sur les fonctions (section SPI for C)
PS : je suis sous visual studio 2010 express
merci de votre aide