手机
当前位置:查字典教程网 >编程开发 >C语言 >浅谈C#互操作的内存溢出问题
浅谈C#互操作的内存溢出问题
摘要:c#调用C++DLL代码,发现了一个隐藏很深的问题。危害很大,而且不易察觉。大概是申明c++的函数时候,有一个long类型的指针。在C#中我...

c#调用C++DLL代码,发现了一个隐藏很深的问题。 危害很大,而且不易察觉。

大概是申明c++的函数时候,有一个long类型的指针。在C#中我的申明成了这样:

public extern void Method(ref uint para);

最初怎么也没有发现这里面有什么问题,知道这个隐藏的问题暴露出来,把前面申明的一个变量改变了, 我才恍然大悟。

复制代码 代码如下:

uint test = 0;

int *p = new IntPtr();

Method(ref test);

在调用Method这里下断点,p的值是分配的一个内存地址。F10跳过Method,p指针就指向了0x00000000!!;

初步分析,是在栈上只给test分配了4个字节存放值,结果通过互操作返回了8个字节的值,就把紧挨着的存放p指针地址的4个字节占用了,恰好这四个字节又是高位,返回数据的高位都是0。 以前了解过c++的栈内存溢出,没想到在c#里被我遇到了,问题看似不大,如何被恰好相邻的四个字节是返回地址,说不定危害不小啊!! 看来c#的互操作还是得小心为好。

【浅谈C#互操作的内存溢出问题】相关文章:

解析C语言中位字段内存分配的问题

浅析C语言中的内存布局

关于C++中的友元函数的一些总结

浅析C++中的虚函数

如何查看进程实际的内存占用情况详解

深入理解大数与高精度数的处理问题

C++中栈结构建立与操作详细解析

简单说说STL的内存管理

解析linux 文件和目录操作的相关函数

C++中关于Crt的内存泄漏检测的分析介绍

精品推荐
分类导航