gpt4 book ai didi

C++ 指针和动态内存

转载 作者:行者123 更新时间:2023-11-30 01:27:22 27 4
gpt4 key购买 nike

自从我完成 C++ 以来已经有一段时间了,我正在尝试复习它,最近我一直在使用 python 和 java,因此需要复习一下指针。

#include <iostream>
using namespace std;
int main()
{
char *s=new char;
cin >>s;
cout <<s<<endl;
delete s;
s=0;
return 0;
}

当我尝试这样做时,我知道我有一个大小为 1 字节的字符,当我输入一些内容时,它会被存储;我可以打印出来。但是如果我尝试大输入它会溢出,我知道大小是有限的。

现在我尝试了这个:

#include <iostream>
using namespace std;
int main()
{
char *s=new char;
cin >>*s;
cout <<s<<endl;
delete s;
s=0;
return 0;

只存储我输入的第一个字母,i first 到 *s 与 s[0] 相同,但即使这样,它也应该将所有内容存储在 s[0] 中。

我不太确定如何理解这一点。

我也试过这个:

char *s=new char [2];
cin>>s; // i enter lets say "hello"
cout<<s[3]; // this prints out "l";

我不明白的是,当我说 new char [2] 时,我到底做了什么,我分配了两个字符吗?,

最佳答案

当你说 new char[2] ,您分配了一个长度为 2 的字符数组

这意味着您有两个人的空间char s,一个在 s[0]一个在s[1] .

您可以访问超过 s[1] ,但是您在那里发现的内容是未定义的 - 在那里读取或写入可能会使您的程序崩溃或使其以不可预知的方式运行。

您在这里产生的是所谓的缓冲区溢出 - 恶意攻击者可以利用它使您的程序按他们希望的方式运行。

关于C++ 指针和动态内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9090533/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com