指针参数为空,函数中声明的字符串在函数退出时消失吗?解决思路
指针参数为空,函数中声明的字符串在函数退出时消失吗?
void f(char **t)
{
t = "hello world" ;
}
{
...
char *p = NULL ;
f(p);
...
}
在调用f(p)的时候,p为空指针,看到很多代码在f函数内部判断如果P为空,则退出,但从编译角度,没有问题,运行也通过。为什么需要p不为NULL呢?
另外,函数f中,p指向"hello ,world",是否函数退出时,p指向的内存快"hello,world"内存块消失?
------解决方案--------------------
你这样写,虽然运行上没有问题,但实际是有隐患的!看下面的代码:
void f(char **t)
{
t = "hello world" ;
}
{
...
char *p = NULL ;
f(p);
...
}
在调用f(p)的时候,p为空指针,看到很多代码在f函数内部判断如果P为空,则退出,但从编译角度,没有问题,运行也通过。为什么需要p不为NULL呢?
另外,函数f中,p指向"hello ,world",是否函数退出时,p指向的内存快"hello,world"内存块消失?
------解决方案--------------------
你这样写,虽然运行上没有问题,但实际是有隐患的!看下面的代码:
- C/C++ code
#include <iostream> using namespace std; int main() { char *ptr; ptr = "hello world!"; cout << ptr << endl; return 0; }
------解决方案--------------------
没有分配内存的时候就写
可能会导致内存的某部分数据被修改
如果被修改的地方的数据很重要
那结果。。。。。
------解决方案--------------------