|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
听了小甲鱼的课之后头铁了一波 试了一次到底是不直接释放
于是便写了一下代码(错的)
#include"stdio.h"
int* m(int,int);
int* m(int x,int y)
{
char str[]="sad";
return str;
}
int main()
{
int x=120,y=110;
printf("%s",m(x,y));
return 0;
}
发现的确释放了 输出的是空白
但是真的释放了吗?
#include"stdio.h"
int* m(int,int);
int* m(int x,int y)
{
char str[]="sad";
return str;
}
int main()
{
int x=120,y=110;
printf("%c",*m(x,y));
return 0;
}
于是我把代码微改一波(错的)
发现可以输出's'
既然释放了那么应该也是空的呀 求解!!
本帖最后由 人造人 于 2017-12-26 20:31 编辑
- #include"stdio.h"
- char *GetString(void)
- {
- char str[] = "hello world!";
- return str;
- }
- int main(void)
- {
- char *str = GetString();
-
- printf("%c\n", *str++);
- printf("%c\n", *str++);
- printf("%c\n", *str++);
- printf("%c\n", *str++);
- printf("%c\n", *str++);
- return 0;
- }
复制代码
GetString函数成功返回了字符串
字符h已经保存下来了
字符串hello world还没有被覆盖
进入printf内部
字符h在rdx寄存器中保存,字符串还没有被覆盖
字符串已经被覆盖
字符h还在rdx寄存器中保存着
字符h成功输出
字符串hello world已经不在
字符串hello world已经不在
rax寄存器保存的不是字符e,也就是说无法输出字符e
无法输出字符e
字符串hello world已经不在
其他字符也无法输出
|
|