透过malloc()问题看底层讲解指针
转载请注明原文来自:http://write.blog.csdn.net/postedit/8650070
公司最近来了实习生小明,公司也分配了一个搭档在实习期间带小明,他就是有几年工作经验的大明,
在这段时间,小明遇到过很多问题,也让大明回忆起了刚工作时候的辛酸苦楚,那时候还没有人带大明呢。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