Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.相关的知识,希望对你有一定的参考价值。

void Graph::Create_DG()//创建一个有向图图的邻接链表表示

//参考第五次的相关实验内容,独立完成一个有向图的邻接表的创建,并
//且最后输出该邻接表,以便判断邻接表是否建立正确
G.arcnum = 16;
G.vexnum = 12;
string v1; //弧的起点
string v2; //弧的终点
int v1locate; //弧的起点 v1 的存储的位置
int v2locate; //弧的起点 v2 的存储的位置
ArcNode * p;
int v,m=0,n=0;
char s[2];
for(v=0;v<G.vexnum;v++)

sprintf(s,"c%d",v+1);
G.vertices[v].data = s;
G.vertices[v].firstarc = NULL;
//indegree[v] = 0;

for(int i=0;i<G.vexnum;i++)

v2 = G.vertices[i].data;
v2locate = locatevex(v2);
cout<<"请输入第"<<i+1<<"个顶点的先决条件个数:";
cin>>m;
for(n=0;n<m;n++)

cout<<"请输入第"<<i+1<<"个顶点的第"<<n+1<<"个先决条件:";
cin>>v1;
v1locate = locatevex(v1);
p=new ArcNode();
p->adjvex = v2locate;
p->nextarc = G.vertices[v1locate].firstarc;
G.vertices[v1locate].firstarc = p;
//++indegree[v2locate];

cout<<endl;

cout<<endl;
cout<<"该图的邻接表为"<<endl;
for(int k=0;k<G.vexnum;k++)

p=G.vertices[k].firstarc;
cout<<k<<" "<<G.vertices[k].data;
while(p!=NULL)

cout<<"->"<<p->adjvex;
p=p->nextarc;

cout<<endl;

cout<<endl<<"s";

这是为了拓扑排序构造一个邻接表,最后cout<<“s“我是为了判断是否运行到最后 ,结果输出了S 然后往后就没有任何代码了,为什么还是出现Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.求大神没分了不好意思
# define MAX_VEX_NUM 20//宏定义数组最大
int indegree[MAX_VEX_NUM];//记录顶点的入度
string classname[12]="基","学","构","言"
,"语分析","计理","理","统","s学","数","普理","分析";
stack<int>mystack;
typedef struct ArcNode //定义邻接表结构

int adjvex; //该弧所指向的顶点的位置
struct ArcNode *nextarc; //指向下一条弧的指针
ArcNode;
typedef struct VNode //定义顶点结构类型

string data; //存放顶点信息
ArcNode *firstarc; //指向第一条依附于该定点的指针
VNode,Adjlist[MAX_VEX_NUM];
typedef struct

Adjlist vertices;
int vexnum; //顶点数
int arcnum; //边数
ALGraph;
这是上面的 类什么的就不写了 貌似没什么关系

主要问题是数组越界了,你定义了一个字符数组s,大小是2,然后试图给它赋值字符c和一个数字,而字符加一个数字已经是2了,每个字符串末尾应该有个空字符的,但是放不下了,于是编译器很生气,就挂了,还有是变量s冲突,不是变量a冲突,而且你代码中也没有a这个变量。改为char s[3]或者大于三都可以 参考技术A 原因是for(inti=0;iarray[j+1])当i=0,j=9时,array[j+1]越界了将for(inti=0;i<10;i++)改成for(inti=0;i<9;i++)

RAD Studio 10 安装失败 提示错误 License status check failure解决办法

最近在安装RAD Studio 10.1 Berlin 时,运行光盘中的setup.exe,在第一页勾选 lincense agreement后下一步,提示如下错误,无法进行安装。

License status check failure

License status check failure (Error code: 255). Please try again later, or contact support.

通过一番搜索和尝试得到以下解决办法:

问题原因:

      由于电脑中已经安装过其他版本的RAD Studio,而不同版本的RAD Studio共享了注册授权信息到该路径 C:\ProgramData\Embarcadero(此路径是WIN10中的,WIN7 WIN8应该一样,没找到则全盘搜索Embarcadero)。

      而安装程序setup.exe在当时会搜索该路径下的.cgb_license 和 .licenses\.cg_license以及相关是slip文件,判断到其中没有符合当前正在安装版本的授权信息,最终报错。

      总体上可以认为是setup.exe的一个BUG,导致无法多版本共存安装。

 

解决方法:

1. 在 C:\ProgramData\Embarcadero 中创建相应版本的文件夹(如XE7 XE8 XE5 或9.0 15.0 16.0 等),将文件.cgb_license 和文件夹 .licenses\.cg_license剪贴到创建的文件夹中。

    如 当前已安装的版本是XE7 则:

        A. 将原来的文件 C:\ProgramData\Embarcadero\.cgb_license 移动到 C:\ProgramData\Embarcadero\XE7\.cgb_license

        B. 将原来的文件夹 C:\ProgramData\Embarcadero\.licenses 移动到 C:\ProgramData\Embarcadero\XE7\.licenses

2. 搜索硬盘中 cglm.ini文件,一般存在RAD Studio安装目录的bin中 还有InterBase相关目录也有,C:\ProgramData\Embarcadero中也可能有,总之打开所有搜索到的cglm.ini文件。

        部分内容如下:

[Embarcadero License Management]
RootDir=${MODULE_DIR}\..
LicenseDir=${ROOTDIR}\License
InfoDir=${COMMON_APPDATA}\Embarcadero\.licenses
SlipDir=${COMMON_APPDATA}\Embarcadero\ 

        A. 修改其中的  InfoDir  和  SlipDir,XE7则参考如下修改

InfoDir=${COMMON_APPDATA}\Embarcadero\XE7\.licenses
SlipDir=${COMMON_APPDATA}\Embarcadero\XE7\ 

3. 修改完启动RAD Studio,确认没有问题再安装新版本,有问题估计只能恢复原样了

 

另外,网上有人说把 C:\ProgramData\Embarcadero 下面所有文件和文件夹删除,这种做法应该也可以,但是有点暴力,而且可能会导致已安装的旧版本无法正常运行。

 

以上是关于Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.的主要内容,如果未能解决你的问题,请参考以下文章

c++ Run-Time Check Failure #0 - ESP 的值未正确保存在...检查简单工作线程的点

动态调用dll遇到的问题

KERNEL_SECURITY_CHECK_FAILURE

Loadrunder脚本篇——Run-time Settings之Preferences

记一次Ubuntu宕机 Failure:File system check of the root filesystem failed

RAD Studio 10 安装失败 提示错误 License status check failure解决办法