#掉过的坑#C语言写Python扩展,PyMem_Malloc崩溃的问题

在C语言中编写Python扩展时遇到崩溃问题,原因是未正确包含头文件,导致编译器错误地将PyMem_Malloc的返回值视为32位整数并进行符号扩展,最终在memcpy时引发非法地址访问。解决方案是确保在源文件中包含或显式声明PyMem_Malloc返回类型为void*。
摘要由CSDN通过智能技术生成

问题描述

C写python扩展,在执行208行之前拨错。黄色小箭头表示“This is the next statement will be executed”,所以问题出在memcpy这行,然而这是C标准库的函数,不太可能出问题。尝试自己写了一个函数,代替memcpy,报错一样,所以问题不在这里。
在这里插入图片描述
在这里插入图片描述

找Bug

但是同一个project中也有其他.c文件使用了memcpy,是没有问题的。

到汇编代码看看,非法访问的地址是怎么产生的。
在这里插入图片描述
报错的地方是上面这里,访问寄存器r15所存的地址报错,r15的地址非法。
在这里插入图片描述
在寄存器监视器中,可以看到r15的值,0x000000001DF42200,; 在64位机器上,16G内存,编译出的64位代码,作为一个地址,高32位全0是很不正常的。这说明

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值