C ++堆栈被指针破坏

时间:2013-01-07 09:51:20

标签: c++ pointers

我在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";
    }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-2)

int main()

它对我有用。 顺便说一句,SIZE应该更高。

#define SIZE 10000