C语言内存分配小问题

前阵子抱着打酱油的心态去面试了一下学校里某个俱乐部举行的一次执委面试,没想到被几个小问题给卡住了。面试完后下了一天苦工终于把那些问题搞定了,呵呵,看来没事多去面试一下还是有好处的,起码知道自己哪些地方存在不足。这里就说说其中一道关于C语言内存分配的问题。

看下面这个程序:

void allocmem(char **p)
 {
     char r[10]={1};
     *p = r;
 }
 
 
 int main()
 {
     int i;
     char *m = NULL;
 
     allocmem(&m);
     if(m)
     {
         for(i = 0; i<10 ; i++)
             printf("m[%d] = %d\n",i,m[i]);
     }
     else
     {
         printf("alloc mem failed\n");
     }
 
     return 0;
 }

运行的结果是:

C语言内存分配小问题

再看下面这个程序:

void allocmem(char **p)
 {
     *p = malloc(10);
     memset(*p,1,10);
 }
 
 int main()
 {
     int i;
     char *m = NULL;
 
     allocmem(&m);
     if(m)
     {
         for(i = 0; i<10 ; i++)
             printf("m[%d] = %d\n",i,m[i]);
     }
     else
     {
         printf("alloc mem failed\n");
     }
        
     return 0;
 }

相关推荐