读书人

透过malloc()有关问题看底层讲解指针

发布时间: 2013-03-12 11:19:35 作者: rapoo

透过malloc()问题看底层讲解指针

转载请注明原文来自:http://write.blog.csdn.net/postedit/8650070

公司最近来了实习生小明,公司也分配了一个搭档在实习期间带小明,他就是有几年工作经验的大明,

在这段时间,小明遇到过很多问题,也让大明回忆起了刚工作时候的辛酸苦楚,那时候还没有人带大明呢。
不过大明经过几年的跌跌撞撞,也总结了不少问题了,有些问题,大明还是可以跟小明讲解的。
你看,现在小明又遇到了问题了,正在那里苦恼呢?究竟是遇到了神马问题了呢?
我们还是一起看吧,小明今天遇到了个malloc()的问题.
展示代码如下:

1:    #include <stdio.h>2:    #include <assert.h>3:    #include <string.h>4:    #include <malloc.h>5:6:    void right_get_mem(char **p, int size)7:    {00401020   push        ebp00401021   mov         ebp,esp00401023   sub         esp,40h00401026   push        ebx00401027   push        esi00401028   push        edi00401029   lea         edi,[ebp-40h]0040102C   mov         ecx,10h00401031   mov         eax,0CCCCCCCCh00401036   rep stos    dword ptr [edi]8:        *p = (char*)malloc(size);00401038   mov         eax,dword ptr [ebp+0Ch]0040103B   push        eax0040103C   call        malloc (004010e0)00401041   add         esp,400401044   mov         ecx,dword ptr [ebp+8]00401047   mov         dword ptr [ecx],eax9:    }00401049   pop         edi0040104A   pop         esi0040104B   pop         ebx0040104C   add         esp,40h0040104F   cmp         ebp,esp00401051   call        __chkesp (00403060)00401056   mov         esp,ebp00401058   pop         ebp00401059   ret10:11:   void main()12:   {00401070   push        ebp00401071   mov         ebp,esp00401073   sub         esp,44h00401076   push        ebx00401077   push        esi00401078   push        edi00401079   lea         edi,[ebp-44h]0040107C   mov         ecx,11h00401081   mov         eax,0CCCCCCCCh00401086   rep stos    dword ptr [edi]13:       char *str = NULL;00401088   mov         dword ptr [ebp-4],014:       //error_get_mem(str, 20); /*此处为错误的代码函数,仅供对照*/15:       right_get_mem(&str, 20);0040108F   push        14h00401091   lea         eax,[ebp-4]00401094   push        eax00401095   call        @ILT+10(error_get_mem) (0040100f)0040109A   add         esp,816:17:       strcpy(str,"0123456789");0040109D   push        offset string "0123456789" (00422f7c)004010A2   mov         ecx,dword ptr [ebp-4]004010A5   push        ecx004010A6   call        strcpy (004030a0)004010AB   add         esp,818:       printf("str:%s\n", str);004010AE   mov         edx,dword ptr [ebp-4]004010B1   push        edx004010B2   push        offset string "str:%s\n" (0042201c)004010B7   call        printf (0040d750)004010BC   add         esp,819:   }
转载请注明原文来自:http://write.blog.csdn.net/postedit/8650070

(稍后待续...)

读书人网 >编程

热点推荐