Ho una DLL wrapper che si interfaccia con un'altra DLL che contiene la seguente funzione:
char * Foobar(void)
{
// BLAH is the function from the DLL this wrapper interfaces too
char *array = 0; // Set up an array pointer for dynamic memory allocation.
int NumOfChar = 0;
// Build array
for (int n=0; (*(BLAH+n) != 'char * Foobar(void)
{
// BLAH is the function from the DLL this wrapper interfaces too
char *array = 0; // Set up an array pointer for dynamic memory allocation.
int NumOfChar = 0;
// Build array
for (int n=0; (*(BLAH+n) != '%pre%'); n++)
{
NumOfChar++; // keep track of how big BLAH is.
}
NumOfChar++; // +1 so I can re-add the NULL
// Try to allocate an array based on the size of BLAH This is dynamic...
if (!(array = new char[NumOfChar]))
{
// If there's a problem allocating the memory, pop up a message.
MessageBox (0, "Error: out of memory.", "Crap", MB_OK);
}
else
{
memcpy(array, BLAH,(NumOfChar)); // copy the contents of BLAH to array.
}
array[NumOfChar+1]='%pre%'; // ensure the last character is a NULL
FreeLibrary(hGetProcIDDLL); // release the DLL
return array;
}
'); n++)
{
NumOfChar++; // keep track of how big BLAH is.
}
NumOfChar++; // +1 so I can re-add the NULL
// Try to allocate an array based on the size of BLAH This is dynamic...
if (!(array = new char[NumOfChar]))
{
// If there's a problem allocating the memory, pop up a message.
MessageBox (0, "Error: out of memory.", "Crap", MB_OK);
}
else
{
memcpy(array, BLAH,(NumOfChar)); // copy the contents of BLAH to array.
}
array[NumOfChar+1]='%pre%'; // ensure the last character is a NULL
FreeLibrary(hGetProcIDDLL); // release the DLL
return array;
}
Sto chiamando questa DLL da LabVIEW che non credo sia specifica per questa domanda, dato che la DLL può essere chiamata da qualsiasi programma. La mia domanda è una volta che Foobar restituisce il puntatore all'array, come posso assicurarmi che l'array sia deallocato in seguito? Questa sembra essere una perdita di memoria, perché la prossima volta che viene chiamata questa routine, l'array successivo non necessariamente sovrascriverà il vecchio array. Userà sempre più memoria, sono corretto in questa logica?
Grazie