69,368
社区成员
发帖
与我相关
我的任务
分享
int main()
{
char a[]="Ti Al V";
char **p;
p=calloc(2,sizeof(char *));
p[0]=calloc(4,sizeof(char));
p[1]=calloc(4,sizeof(char));
p[0]=strtok(a," ");
p[1]=strtok(NULL," ");
printf("%s\n",p[0]);
printf("%s\n",p[1]);
free(p[0]);
free(p[1]);
free(p);
return 0;
}
p[0]=strtok(a," ");
p[1]=strtok(NULL," ");
这两个操作已经修改了p[0], p[1]的地址了。即上面calloc申请的内存地址的首地址被覆盖了。这样会造成内存泄露。
这样改一下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char a[]="Ti Al V";
char **p, *tmp;
p = (char **)calloc(2,sizeof(char *));
p[0] = (char *)calloc(4,sizeof(char));
p[1] = (char *)calloc(4,sizeof(char));
tmp = strtok(a," ");
strcpy(p[0], tmp);
tmp = strtok(NULL," ");
strcpy(p[1], tmp);
printf("%s\n",p[0]);
printf("%s\n",p[1]);
free(p[0]);
free(p[1]);
free(p);
return 0;
}