#include <stdio.h>
char *func(void)
{
char *str = "Hello world";
return str;
}
int main(void)
{
char *p = NULL;
p = func();
return 0;
}
这段代码有缺陷吗?会存在非法内存访问吗?
7 个解决方案
#1
面试题
工作中谁会写这样的代码啊
工作中谁会写这样的代码啊
#2
编译器编译程序时将"hello,world"这个字符串常量存放在了常量存储区中,定义指针时char *str="hello,world"; str指向的是常量态存储区地址,所以尽管从函数返回了,但是常量存储区存储的字符串还是有效的,常量存储区要在程序结束的时候才释放!
#3
不会
func 返回的其实不是局部变量, 而是指向只读数据段内的一个指针
func 返回的其实不是局部变量, 而是指向只读数据段内的一个指针
#4
常量存储区中的内容不会改变么?比如str指向的内存不会在程序的后续运行中被覆盖吗?
#5
char *str = "Hello world"; <===> const char *str = "Hello world";
#6
常量存储区的内存是不允许被重写的,是作为代码的一部分被加载,如果你试图修改常量存储区的内容,编译将会报错
#7
2楼和10楼说的很清楚了, 常量区的内容当然不会被更改了
#1
面试题
工作中谁会写这样的代码啊
工作中谁会写这样的代码啊
#2
编译器编译程序时将"hello,world"这个字符串常量存放在了常量存储区中,定义指针时char *str="hello,world"; str指向的是常量态存储区地址,所以尽管从函数返回了,但是常量存储区存储的字符串还是有效的,常量存储区要在程序结束的时候才释放!
#3
不会
func 返回的其实不是局部变量, 而是指向只读数据段内的一个指针
func 返回的其实不是局部变量, 而是指向只读数据段内的一个指针
#4
编译器编译程序时将"hello,world"这个字符串常量存放在了常量存储区中,定义指针时char *str="hello,world"; str指向的是常量态存储区地址,所以尽管从函数返回了,但是常量存储区存储的字符串还是有效的,常量存储区要在程序结束的时候才释放!
常量存储区中的内容不会改变么?比如str指向的内存不会在程序的后续运行中被覆盖吗?
#5
编译器编译程序时将"hello,world"这个字符串常量存放在了常量存储区中,定义指针时char *str="hello,world"; str指向的是常量态存储区地址,所以尽管从函数返回了,但是常量存储区存储的字符串还是有效的,常量存储区要在程序结束的时候才释放!
常量存储区中的内容不会改变么?比如str指向的内存不会在程序的后续运行中被覆盖吗?
char *str = "Hello world"; <===> const char *str = "Hello world";
#6
常量存储区的内存是不允许被重写的,是作为代码的一部分被加载,如果你试图修改常量存储区的内容,编译将会报错
#7
2楼和10楼说的很清楚了, 常量区的内容当然不会被更改了