要告诉他的快告诉他为什么不是" 0. "在前面
偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
我可确定一件事,你看不懂这个free函数
俺又把精彩的错过了..在详细解读之前..我先说那个什么0.在后面吧
[QUOTE]char *ptr1,*ptr2;
ptr1=(char *)malloc(80*sizeof(char));
gets(ptr1); /*用户输入*/
ptr2=ptr1;
puts("0. ");
puts(ptr1);[/QUOTE]
[QUOTE]#include<stdio.h>
#include<malloc.h>
int main()
{
char *ptr1,*ptr2;
ptr1=(char *)malloc(80*sizeof(char));
gets(ptr1);
ptr2=ptr1;
puts("0. ");
puts(ptr1);
ptr2++;
free(ptr2);
puts("1. ");
puts(ptr1);
ptr2--;
free(ptr2);
puts("2. ");
puts(ptr1);
}[/QUOTE]
baidu 的这段代码已经很明了了..
或者再稍微修改一下.
#include<stdio.h>
#include<malloc.h>
int main()
{
char *ptr1;
ptr1=(char *)malloc(80*sizeof(char));
gets(ptr1);
puts("0. ");
puts(ptr1);
ptr1++;
free(ptr1);
puts("1. ");
puts(ptr1-1);
ptr1--;
free(ptr1);
puts("2. ");
puts(ptr1);
}
这样牧羊应该看得明白了吧
asdfd
0.
asdfd
Press any key to continue
你们在什么环境下运行的?我用vc++6.0运行时在第一个free处程序就出错了:
终止(A) 重试(R) 忽略(I)
也就是说free(void *p)里的参数只能是申请时返回的指针了。
偶GOOGLE了很久,就是没有一篇专门详细深入介绍malloc()和free()机制文章。偶自己准备总结一篇。
不过偶现在对这个问题已经有了进一层的理解,万岁!