我有一个与char指针的动态内存分配有关的奇怪问题.我有类似的东西
char *input = new char; //1
gets(input) //2
char *dest = new char; //3Run Code Online (Sandbox Code Playgroud)
在step3期间,我在运行时遇到堆损坏错误.仅当我输入的字符串长度超过23个字符时才会发生这种情况.
如果我不做任何新的操作,那么没有问题.
如果我指定,此问题已解决
char *input = new char[100];
但我希望输入是基于用户输入的动态.
我不确定在这种情况下24字节的作用是什么.我不想限制为100或者n个字符...我在内存分配方面有点弱......有人可以解释这种情况吗?
不,你不能这样做.您可以只使用静态缓冲区或使用"cpp-way",即:
std::string str;
std::getline(std::cin, str);
Run Code Online (Sandbox Code Playgroud)
您的程序在任何长度大于零的输入上都表现出未定义的行为,因为gets添加了一个空终止符.该程序不会崩溃多达23个字符的事实是一个不幸的巧合.
如果要动态分配缓冲区,请不要使用基于gets或char的输入; 相反,将您的数据读入std::string.
| 归档时间: |
|
| 查看次数: |
5039 次 |
| 最近记录: |