malloc分配的内存访问失败问题

问题描述:

在vs中编写c语言代码。再main函数中调用malloc的程序正常运行。放在另外一个.c文件里总是报访问失败。

char * test = (char *)malloc(10);
memset(test,0,10);

非常基础的一句话。

运行memset,访问内存的时候总是异常。

 

问题分析:

当查看内存的时候,调试器的反应是

为啥会造成读取出错呢?

查看反汇编代码如下(汇编解释在最后):

	char * test = (char *)malloc(10);
00007FF7D7AD1D5A  mov         ecx,0Ah  
00007FF7D7AD1D5F  call        malloc (07FF7D7AD1361h)  
00007FF7D7AD1D64  cdqe  
00007FF7D7AD1D66  mov         qword ptr [test],rax  

msdn上写的。使用malloc需要包含头文件 <stdlib.h> and <malloc.h>

问题原因:

包含之后的正确的反汇编是:

	char * test = (char *)malloc(10);
00007FF7D1411D5A  mov         ecx,0Ah  
00007FF7D1411D5F  call        qword ptr [__imp_malloc (07FF7D14344D0h)]  
00007FF7D1411D65  mov         qword ptr [test],rax 

问题解决方法:

使用malloc需要包含头文件 <stdlib.h> and <malloc.h>

 

 

汇编解释:

mov 指令:指令用于将一个值写入某个寄存器

call指令:调用功能。这些指令实现了子例程的调用和返回

CBW/CWDE/CDQE扩展指令:使用符号扩展的方式对源操作数进行双倍扩展。使用eax的最高位拓展rax高32位的所有位

qword ptr:指针内容。大小指令BYTE PTRWORD PTRDWORD PTR可以达到这个目的,分别指示1、2和4个字节的大小。

 

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

道格拉斯范朋克

播种花生牛奶自留田

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

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

打赏作者

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

抵扣说明:

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

余额充值