gpt4 book ai didi

C++ 堆栈被指针损坏

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

我用 C++ 编写了一个简单的指针代码,但在“str”周围遇到了堆栈损坏的运行时错误。我知道如果您试图到达数组中未分配的位置,它会出现此错误,但在这种情况下,当指针到达 '\0' 时 while 停止。可能是 ptr 在内存中继续前进并指向“\0”吗?提前致谢! :-)

代码如下:

#include <iostream>
using namespace std;
#define SIZE 5
void CHANGE(char str[]);

void CHANGE(char str[])
{
char *ptr=str;
while(*ptr!='\0')
{
if( ( (*ptr>='a')&&(*ptr<='z') )|| ( (*ptr>='A')&&(*ptr<='Z') ) )
{
if(*ptr=='z')
*ptr='a';
else if(*ptr=='Z')
*ptr='A';
else
(*ptr)++;

}

ptr++;
}

}

void main()
{

char str[SIZE];
cout<<"please enter a sring\n";
cin>>str;
CHANGE(str);
cout<<str<<"\n";
}

最佳答案

因为您定义了 SIZE 5,所以您可以获得大小为 4 的输入,因为您将其视为以 null 结尾的字符串。因此,如果您输入的字符多于 SIZE,您的 CHANGE 函数将尝试访问尚未分配的内存。希望对您有所帮助。

关于C++ 堆栈被指针损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14193429/

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