前陣子抱著打醬油的心態去面試了一下學校裡某個俱樂部舉行的一次執委面試,沒想到被幾個小問題給卡住了。面試完後下了一天苦工終於把那些問題搞定了,呵呵,看來沒事多去面試一下還是有好處的,起碼知道自己哪些地方存在不足。這裡就說說其中一道關於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;
}
運行的結果是:
再看下面這個程序:
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;
}