大家有没有这方面更加详尽的说明
程序及测试结果
#include <stdio.h>
int num = 0;
int main(int argc,char **argv,char **env)
{
int ch = 0;
printf("&ch : %p\n",&ch);
printf("&num : %p\n",&num);
printf("&argc : %p\n",&argc);
printf("&argv : %p\n",&argv);
printf("&env : %p\n",&env);
printf("argv[0] : %p\n",argv[0]); // main函数名
printf("argv[1] : %p\n",argv[1]); // ?不知这个空间合不合法
return 0;
}
9 个解决方案
#1
main的形参肯定是栈上呀,要不退出main之后岂不是内存泄露了
#2
ls的解释似乎合理
#3
LZ的截图已经能够说明问题了。
ch是在栈上的,argc/argv/env三个参数的地址离它不远。
ch是在栈上的,argc/argv/env三个参数的地址离它不远。
#4
在环境中。
#5
栈里,地址就很说明问题
#6
当然是在栈里
#7
堆是由你手动分配释放的
#8
int argc,
char **argv,
char **env
这三个是在栈中
*argv 也许在栈中,毕竟程序员自己也可用用 alloca 分配栈上内存
**argv 在命令行参数 或者命令行参数某个copy的存储位置
env 与此雷同
char **argv,
char **env
这三个是在栈中
*argv 也许在栈中,毕竟程序员自己也可用用 alloca 分配栈上内存
**argv 在命令行参数 或者命令行参数某个copy的存储位置
env 与此雷同
#9
请参考《CSAPP》中第8章 异常控制流,有图片显示告诉你,char ** agrv和char ** env保存在栈上,且在main函数栈之前,agrv和env指向一个以NULL为结尾的char*数组,数组中每一个值都指向一个字符串。
以上char*数组和字符串都是在栈中,且在mian函数栈前。
以上char*数组和字符串都是在栈中,且在mian函数栈前。
#1
main的形参肯定是栈上呀,要不退出main之后岂不是内存泄露了
#2
ls的解释似乎合理
#3
LZ的截图已经能够说明问题了。
ch是在栈上的,argc/argv/env三个参数的地址离它不远。
ch是在栈上的,argc/argv/env三个参数的地址离它不远。
#4
在环境中。
#5
栈里,地址就很说明问题
#6
当然是在栈里
#7
堆是由你手动分配释放的
#8
int argc,
char **argv,
char **env
这三个是在栈中
*argv 也许在栈中,毕竟程序员自己也可用用 alloca 分配栈上内存
**argv 在命令行参数 或者命令行参数某个copy的存储位置
env 与此雷同
char **argv,
char **env
这三个是在栈中
*argv 也许在栈中,毕竟程序员自己也可用用 alloca 分配栈上内存
**argv 在命令行参数 或者命令行参数某个copy的存储位置
env 与此雷同
#9
请参考《CSAPP》中第8章 异常控制流,有图片显示告诉你,char ** agrv和char ** env保存在栈上,且在main函数栈之前,agrv和env指向一个以NULL为结尾的char*数组,数组中每一个值都指向一个字符串。
以上char*数组和字符串都是在栈中,且在mian函数栈前。
以上char*数组和字符串都是在栈中,且在mian函数栈前。