gpt4 book ai didi

C++ 动态分配,指针

转载 作者:太空宇宙 更新时间:2023-11-04 15:11:55 25 4
gpt4 key购买 nike

我收到此错误:

"crt detected that the application wrote to memory after end of heap buffer"

这个程序应该每隔一个符号写一次...

char x = 1;
while ( x != 0) {
char *ptr(0);
ptr = new char;
fgets(ptr, 100001, stdin);

for (char i = 0; i < sizeof(ptr); i++) {
cout << *(ptr + i);
i++;
}
cout << endl;
delete ptr;
ptr = 0;
}

最佳答案

ptr = new char; 为指针分配正好 一个字节。 fgets(ptr, 100001, stdin); 尝试将最多 100001 个字符读入其中,显然远远超出了分配的边界。

直接的解决方案是确保使用 new 的数组形式分配足够大小的缓冲区,即 ptr = new char[100001];。反过来,这将导致将 delete 也更改为数组形式:delete[] ptr

此外,请记住 sizeof(ptr) 将为您提供指针的大小(在大多数平台上为 4 或 8 个字节)。您可能希望使用 strlen 或类似工具来查明字符串何时结束。

以上所有建议都应结合学习练习来采纳。在现实生活中,你不应该这样做,而是使用 std::string 和现代的面向字符串的阅读方式。 (std::getline 将是最容易获得的)。

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

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