die ungültige zeigeroperation kommt daher das du speicher außerhalb der
dll frei gibst welcher aber in der
dll angefordert wurde. Die
DLL und das Hauptprogramm haben getrennte Speichermanager (sofern nicht ShareMem etc. verwendet wird). Du kannst also nicht einfach den Speicher eines anderen Memorymanagers frei geben.
Prinzipiell sollte man (guter Stil) Daten dort frei geben wo sie auch angefordert werden (Ebene sowie Modul).