当前位置:  编程技术>c/c++/嵌入式

浅谈C#互操作的内存溢出问题

    来源: 互联网  发布时间:2014-10-21

    本文导语:  c#调用C++DLL代码,发现了一个隐藏很深的问题。 危害很大,而且不易察觉。 大概是申明c++的函数时候,有一个long类型的指针。在C#中我的申明成了这样: public extern void Method(ref uint para); 最初怎么也没有发现这里面有什么问题...

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#对象中两种copy操作:深拷贝(Deep Copy)与浅拷贝(Shallow Copy)
  • c#的时间日期操作示例分享(c#获取当前日期)
  • .NET下 c#通过COM组件操作并导出Excel实例代码
  • C#操作txt文件,进行清空添加操作的小例子
  • C#实现装箱与拆箱操作简单实例
  • C# 中的??操作符浅谈
  • c/c++/嵌入式 iis7站长之家
  • c# 调用Surfer软件,添加引用的具体操作方法
  • c#异步task示例分享(异步操作)
  • c#下注册表操作的一个小细节
  • C#操作CLOB大对象的代码一例
  • c#判断操作系统位数实例代码
  • 一些关于c#与Sql的时间的操作
  • c#判断操作系统位数的示例分享
  • C#中的位操作小结
  • C# 操作符之三元操作符浅析
  • C# Dictionary操作范例(入门新手参考)
  • C#的WebBrowser操作frame实例解析
  • C# Winform 操作 INI 配置文件的实现代码
  • C#程序最小化到托盘图标操作步骤与实现代码
  • C#操作FTP出现500错误解决办法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 【操作系统虚拟内存和物理内存疑惑】
  • 操作系统里的虚拟内存的好处?
  • 操作系统是怎么把程序装进内存呢?
  • 内核操作用户空间内存
  • 操作系统对于"堆"内存的管理,一个疑惑
  • s3c2410 linux操作系统 insmod 驱动错误 内存耗尽
  • 第一次提问.一个操作系统问题.[拿内存加上外存容量之和与虚拟存储空间相比哪个大?]
  • 请问return语句会执行哪些操作?在函数中return一个已分配内存的指针,该指针所占用的内存会释放吗?
  • 这个操作java会自动释放内存空间吗?
  • 如何在Linux下用驱动程序切出200MB内存,不让操作系统使用,给某一进程独享
  • 关于使用c程序对mysql数据操作造成内存不断减少的问题
  • 因为mmap函数返回值是void*类型,是否可以将其强制转换成char*类型,按字符串操作,然后将修改重新写入内存映像即可????
  • 为什么多线程编程中new的内存在delete时出现非法操作?
  • Linux操作系统下Oracle数据库多实例启动方式及修改内存
  • 共享内存操作程序问题
  • 【咨询】Linux操作系统下读未申请的内存或导致异常吗?谢谢!
  • 笔试遇到内存操作思考题,C语言
  • 如何查看AIX操作系统的CPU和内存使用情况?
  • 字符串操作(读写在内存中)的问题?
  • 链表和内存的操作
  • C++ Stacks(堆栈) 成员 操作:比较和分配堆栈
  • 谁有操作系统PV操作的例子???谁有操作系统PV操作的例子???谢谢!!
  • C++ Strings(字符串) 成员 Operators:操作符,用于字符串比较和赋值
  • 已安装了Windows操作系统,还想安装Linux。却还想在开机选择操作系统时由Windows引导,请问如何操作。在线等待
  • C++ I/O 成员 flags():操作flags
  • 请问LINUX操作系统是怎样对外围设备进行操作的
  • C++ I/O 成员 width():操作域宽度
  • 什么样的操作最耗费服务器的IO操作?
  • Xcode介绍及创建工程和工程依赖操作步骤
  • 无操作系统下对U盘的操作
  • MyEclipse如何查看和设置文件编码格式相关操作


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3