最近我在这里发现,指针(或至少是数组)不能在其内存创建的不同程序集中删除。据我所知,指针是内存中具有另一个变量地址值的变量。因此,为什么指针的值(即变量的地址)无法被擦除,并且其内存可以从另一个程序集中释放?
assembly
对应一个 DLL)都可以拥有自己的堆,因此你需要在分配内存的同一 DLL 中释放内存,否则会发生奇怪的事情(未定义的行为 - 例如错误或崩溃)。因此,除非你知道两个不同的模块(DLL、程序集)具有相同的堆,否则无法在一个模块中释放另一个模块中分配的内存。mmap
分配了一些内存,则不能只是将其传递给free
或delete
以释放它。 - Mats Petersson
new
和delete
的底层实现可能因所使用的DLL /库而异,这会在混合匹配时导致损坏。 - Joenew
和delete
实现是否都一样?你能举个例子说明有问题吗? - JMCF125