c++堆栈被指针损坏

C++ stack corrupted with pointers

本文关键字:损坏 指针 堆栈 c++      更新时间:2023-10-16

我用c++写了一个简单的指针代码,我在"str"周围得到了堆栈损坏的运行时错误。我知道它给出了这个错误,如果你试图得到一个未分配的地方在一个数组,但在这种情况下,当指针得到'' while停止。可能是PTR继续在内存中前进并指向''吗?提前感谢!: -)

代码如下:

#include <iostream>
    using namespace std;
    #define SIZE 5
    void CHANGE(char str[]);
    void CHANGE(char str[])
    {
        char *ptr=str;
         while(*ptr!='')
         {
            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 sringn";
        cin>>str;
        CHANGE(str);
        cout<<str<<"n";
    }

因为您定义了SIZE 5,所以您可以获得最大大小为4的输入,因为您认为它是一个以空结束的字符串。因此,如果您输入的字符多于SIZE,则CHANGE函数将尝试访问尚未分配的内存。希望有帮助。

int main()

这对我有用。顺便说一下,SIZE应该更大一些。

#define SIZE 10000