标签:int 例子 nbsp ges 释放 log printf 方式 注意
特别注意 : brk返回值 0成功 -1 失败
sbrk返回的是开辟之前的地址,错误返回-1
开辟后要brk(p)释放掉内存空间
简单示例:
1 1 #include <stdio.h> 2 2 #include <unistd.h> 3 3 #include <stdlib.h> 4 4 #include <string.h> 5 5 6 6 int main(int argc,char *argv[]) 7 7 { 8 8 void *p=sbrk(0); 9 9 void *str=sbrk(5); 10 10 brk(p+5); 11 11 // (*(char **)p)="adsf"; 12 12 // printf("%s",*((char**)p)); 13 13 strcpy((char*)str,"asdf"); 14 14 brk(p+9); 15 15 *((int *)(p+5))=123; 16 16 // printf(" %c\n",*(char *)(p+3));//输出f 17 17 18 18 printf("%s\n",(char *)(str)); 19 19 20 20 brk(p+5); 21 21 22 22 *(int *)(p+5)=123; 23 23 printf("%d\n",*(int *)(p+5)); 24 24 25 25 brk(p); 26 26 return 0;
[root@localhost 01基础测试]# ./demo asdf 123
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 #include <string.h> 5 6 int main(int argc,char *argv[]) 7 { 8 void *p=sbrk(0); 9 brk(p+5); 10 strcpy((char*)p,"asdf"); 11 12 13 printf(" %#x\n",&*(char *)(p+3));//输出f的地址 14 printf(" %#x\n",&*(char *)(p+2));//输出d的地址 15 void *q=sbrk(2); 16 void *m=sbrk(1); 17 void *n=sbrk(1); 18 printf(" %#x\n",&*(char *)(q));//输出q的地址 19 20 printf(" %#x\n",&*(char *)(m));//输出m的地址 21 printf(" %#x\n",&*(char *)(n));//输出n的地址 22 printf("%s\n",(char *)(p)); 23 24 25 brk(p); 26 return 0; 27 } ~
[root@localhost 01基础测试]# ./demo2 0xf1a003 0xf1a002 0xf1a005 0xf1a007 0xf1a008 asdf
标签:int 例子 nbsp ges 释放 log printf 方式 注意
原文地址:http://www.cnblogs.com/jasongl/p/7120994.html