关于在MFC中添加C文件 + 关于 new 和 malloc + 静态局部变量指针

在MFC中添加C文件,

一般的的流程是添加完成后,取消预编译选项,然后在C文件中按照C语言的方式编写就可以了;

在C++中调用C函数,extern “C” 包含函数就可以了,或者包含C文件相关的头文件就可以了;


但是今天发现了一个问题:

 在C文件中通过malloc()函数创建内存空间, 在C++中,通过new创建内存空间;

然后将C的内存空间memcpy到C++的内存空间;

在debug的时候没有问题,但是在release的时候出现了问题,如下:


//c文件:

unsignd char * CreateMem()

{

     ......;

    unsignd char * pbuf = (unsignd char *)malloc(1000);

   

     return pbuf;

}


//C++文件

void GetMem()

{

    unsignd char * pGetBuf = CreateMem();

    unsignd char * pNewBuf = new unsignd char[1000];


    memcpy(pNewBuf, pGetBuf, 1000);

}



//C++程序的中调用;

void testFunction()

{

      GetMem(); //release模式下,执行到这里直接崩溃;debug下运行正常;

}


大概调用方式流程是上面的,因为没有找到具体原因,所以不知道问题在哪里,只是大概写了一下;

我觉得应该都可以用,但是release出错;


百度之后,有人说是 new的时候要指定空间的类型,我猜想,或许malloc也要指定类型,但是都指定了,还是错误;

没有找到更好的办法,为了解决这个问题,我只好经C文件修改为CPP文件,然后重新编译,修改相关类型转,就可以正常运行了;


目前还不清楚什么原因,又懂得,可以分析一下,写到评论里;


建议: 这里建议不要将 C 文件和 CPP 文件 程序混合应用, 如果非要用到几个简单的C文件,建议将c文件修改为cpp文件,然后将 其中的malloc修改为new, free修改为delete;


如果c文件比较多,建议封装为dll,然后cpp再用;







关于 new 和 malloc 


现在一般用C的人少了,C++中,建议用new,不要用 malloc,之前的问题,可以是用的自定义动态链表,非常频繁的 malloc 和free,几个小时后,在指针内存的地方程序崩溃了,这类问题也没法调试,因为程序没有错误,只是可能malloc错误了;


也不建议 malloc 和 new 混合应用;



关于局部静态指针:

比如 static unsignd char * pbuf = new unsignd char [10000];  

         但是在几个小时后,居然 程序崩溃了,通过dump文件定位,居然显示pbuf为0,修改为全局变量,程序运行一天时间,没有出现过崩溃;


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chinabinlang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值