关于malloc内存申请的深入研究-创新互联
在内存申请和使用上总是会出现一些莫名其妙的问题,今天刚好又碰到了,这里总结一下。
创新互联网站设计,为客户量身定制各类网站建设业务,包括企业型、电子商务型、响应式网站建设、行业门户型等各类网站,实战经验丰富,成功案例众多。以客户利益为出发点,创新互联网站制作为客户规划、按需定制网站符合企业需求、带有营销价值的网络建站方案认真对待每一个客户,我们不用口头的语言来吹擂我们的优秀,上千家的成功案例见证着我们的成长。//1.编译可以通过,但是执行不过。卡死在注释那一句 void test() { char * str = (char *)malloc(100); strcpy(str,"hello"); free(str); if(str != NULL) { strcpy(str,"world"); printf("%s\n",str);//因为str已经free,所以对str的访问出现问题,卡死在这一步 } } //--------------------------------------- //2.双指针是OK的 void getMemory(char **p,int num) { *p = (char *)malloc(num); } void test() { char *str = NULL; getMemory(&str,100); strcpy(str,"hello"); printf("%s\n",str); } //----------------------------------------- //3.编译通过,执行通过,返回垃圾文字。 char * getmemory() { char p[] = "hello world"; return p; } void test() { char *str = NULL; str = getmemory(); printf("%s\n", str);//因为getmemory()中返回的是局部变量的地址, //所以在getmemory()执行完毕后,该变量自动释放。所以访问失败。输出一些垃圾文字。 } //----------------------------------------- //4.编译通过,执行失败。 void getmemory(char *p) { p = (char *)malloc(100);//内存空间申请后,指向这一空间的指针被释放 } void test() { char *str = NULL; getmemory(str); strcpy(str, "hello world");//str没有空间来容纳后面的字符串 printf("%s\n", str); }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
标题名称:关于malloc内存申请的深入研究-创新互联
URL网址:http://myzitong.com/article/ehdij.html