我有以下代码:
char buffer[10];
void main(int argc, char *argv[]) {
strcpy(buffer, argv[1]);
printf("value of buffer %s\n",buffer);
}
Run Code Online (Sandbox Code Playgroud)
我知道将缓冲区变量放在main函数中我可以溢出堆栈,但是通过将它声明为全局变量,无论我从命令行输入多少ascii字符都没有发生.我期待一个分段错误,但它似乎打印我输入的所有字符.怎么会?
我有另一个与该主题相关的问题,如果一个程序有一个缓冲区溢出漏洞,例如堆栈溢出,我可以输入一个我想要的代码到易受攻击的变量中,或者如果代码超过了,那么SO会抛出一个分段默认异常为用户程序分配的内存边界?
可能重复:
动态内存和"普通"内存之间的差异
我正在阅读C++教程,我不明白为什么我需要声明动态内存,这就是教程所说的:
到目前为止,在我们所有的程序中,我们只有我们为变量声明的可用内存,在程序执行之前,所有变量的大小都要在源代码中确定.
然后它说我们必须使用new和delete运算符来使用动态内存.但是,我似乎在声明一个指针时使用动态内存,例如char*p,我没有指定字符数组的长度.事实上,我认为当你使用指针时,你总是使用动态内存.不是吗?我只是没有看到使用new运算符声明变量之间的区别.我真的不明白动态内存是什么.谁能解释一下这个?