VS2010中“Stack around the variable 'XXX' was corrupted.”处理方法

1 问题引入

VS2010中基于控制台的Win32程序,输出正常,当关闭程序后,会弹出错误对话框,显示“Stack around the variable 'XXX' was corrupted.”如图1所示。

VS2010中“Stack around the variable 'XXX' was corrupted.”处理方法_第1张图片 

1 报错窗口

2问题分析

2.1 出错代码

在出错代码中,首先定义了一个名为strPrint的结构,该结构包含了两个字符指针。在main()函数中定义了一个Print结构的对象a和一个Print结构的指针Print,并将该指针的值赋值为a的地址。接下来通过指针Print对内存进行操作。

#include "stdlib.h"

#include "string"

typedef struct Print{

    char * FileName;

    char * PrintName;

}StrPrint;

int _tmain(int argc, _TCHAR* argv[])

{

StrPrint a;

    StrPrint *Print;

Print=&a;

    Print->PrintName="123";

    Print->FileName="456";

    printf("%s,%s\n",Print->PrintName,Print->FileName);

    Print++;

    Print->PrintName="abc";

    Print->FileName="def";

    system("pause");

    return 0;

}

2.2 代码分析

通过调试程序可知,a的地址为0x006FFC3C0x006FFC3C~0x006FFC43间的8个字节保存了aFileNamePrintName值;在对Print进行加1后,Print的值变为0x006FFC440x006FFC44~0x006FFC4B间的8个字节保存了Print1后对应的FileNamePrintName值,如图2和图3所示。

VS2010中“Stack around the variable 'XXX' was corrupted.”处理方法_第2张图片 

2 内存栈示意图

 VS2010中“Stack around the variable 'XXX' was corrupted.”处理方法_第3张图片

3 内存栈值

报错信息“Stack around the variable 'a' was corrupted.”的意思是“变量a周围的栈被破坏了”。正如图2和图3所示,程序中只申请了a的内存,即0x006FFC3C~0x006FFC43间的8个字节,但是却对另外的0x006FFC44~0x006FFC4B间的8个字节进行了修改,说明a周围的栈被破坏了。

3 问题解决

如果需要修改strPrint结构的两个变量,则需要定义两个变量。将代码修改如下即可

StrPrint a[2];

StrPrint *Print;

Print=a;

......

 

你可能感兴趣的:(C++基础)