我写了一个dll,其中有一个函数返回一个数组,
然后我在一个窗体应用程序中调用,但是每次每次循环调用完毕都有一个指针错误。
后来,我把接受数组的变量改成模块级别的变量,运行的时候没有问题了,
但窗体退出的时候,问题照样存在。这明显是释放了不该释放的指针或释放的时候指针已经是nil的。请大家讨论delphi中内存管理,与指针的使用。
然后我在一个窗体应用程序中调用,但是每次每次循环调用完毕都有一个指针错误。
后来,我把接受数组的变量改成模块级别的变量,运行的时候没有问题了,
但窗体退出的时候,问题照样存在。这明显是释放了不该释放的指针或释放的时候指针已经是nil的。请大家讨论delphi中内存管理,与指针的使用。
所以由dll分配内存然后交给exe来释放绝对是一个愚蠢的做法。
同意!
其实在dll中返回数组,不仅仅在delphi中有楼主说的问题,在C/C++中问题同样存在
我的一般作法是,返回静态(或全程)数组.这样,不用动态分配内存,唯一的缺点是只能返回固定长度的数组
当然,正规的作法(多看国外高手源码)
在exe中申请/释放内存,将数组作为指针参数调用dll,在dll中改数组的值
同意:)
参考windows api的做法吧:
procedure f(var buf; const bufsize: Integer);
建议在dll中使用内存映象文件传递数组.