局部指针变量为什么可以正确返回?
来源:互联网 发布:淘宝夜鹰 编辑:程序博客网 时间:2024/05/22 16:00
作为一个菜鸟级别的程序员,我也知道一句话叫做:不能返回局部指针变量
最近有一个问题困扰了我很久,到底能不能返回局部变量。。局部指针变量。。。
先看下面的代码
#include <stdio.h>#include <stdlib.h>#include <string.h>char *func(){ char *p = (char *)malloc(100); strcpy(p, "hello"); return p;}int main(){ char *str = NULL; str = func(); free(str); strcpy(str, "world"); printf(str); return 0; }
我一直认为,这样的程序肯定不对,返回局部变量的指针,指针在返回时会被释放,但结果却是可以打印出world的,只是报了一个警告。
这是为什么呢?
研究了一下,才知道,return之后指针释放了,但所指向的内存空间还未被分配出去,free不会改变原来指针的指向,此时内存也还未分配,所以strcpy才会成功。
#include <stdio.h>#include <stdlib.h>struct A { int a; };A* func1() { A test; test.a = 100; return &test;}A* func2() { A* test = (struct A *)malloc(sizeof(struct A)); test->a = 100; return test;}int main() { A* p = NULL, *q = NULL; p = func1(); printf("%d\n", p->a) ; q = func2(); printf("%d", q->a); free(p); free(q); system("pause"); return 0;}
这个代码可以输出两个100,是一样的道理。
所以说,返回局部指针变量,可能是会得到正确的结果,但只会在小程序中,程序一大,内存操作多了,就会出错了。
阅读全文
0 0
- 局部指针变量为什么可以正确返回?
- C指针以及为什么不能返回局部指针变量,却可以返回局部变量
- 返回局部变量指针
- 返回局部变量指针
- 返回局部变量指针
- 返回局部变量指针
- 返回局部指针变量
- 返回局部指针变量
- 返回局部指针变量
- 返回局部指针变量
- 返回局部变量和指针
- return可以返回基本类型的局部变量,但是不可以返回指针
- 为什么返回值为数值时,返回局部变量可以,而返回值为引用时,返回局部变量不可以?
- 为什么C++中千万不要返回局部对象或变量的引用和指针
- 为什么C++中千万不要返回局部对象或变量的引用和指针
- 方法可以返回局部变量的引用
- 函数可以返回局部的指针数组
- 不要返回指向局部变量的指针
- python unittest 自动化测试
- session & cookie详解
- Java邮件开发前期准备之DOS下用SMTP发送邮件测试
- linux系统编程-read()write()函数分析
- html5以及jQuery实现本地图片上传前的预览
- 局部指针变量为什么可以正确返回?
- 排序(二)
- Java实现单链表的排序
- javascript学习(十六)— 浏览器对象
- linux安装mysql
- spark-submit运行jar包脚本命令
- (16)视图(view)
- 浮动元素引起的问题和解决方法
- markdow-文档中图片居中