[英]*** stack smashing detected *** in a C++ array program
我正在编写一个简单的程序,该程序模拟有关电子自旋的现实世界物理问题。 它应该用1或-1随机填充10个数组。 然后选择100个元素,并根据其相邻元素进行以下转换:
+-+ ..... +++
-+- ..... ---
+++ ..... +++
--- ..... ---
并在以下情况下随机选择结果:
-++ ..... --+ or -++
--+ ..... --+ or -++
+-- ..... ++- or +--
等等
但是当我运行它时,出现以下错误: *检测到堆栈粉碎* :./a.out终止中止(核心已转储)
我检查了一下,它在最后的“ else”两行上。 当我评论它们时,它不会给出错误。
我的代码:
#include<iostream>
#include<fstream>
#include<stdlib.h>
using namespace std;
int main(){
srand(time(NULL));
int arr[10],a[2],i,curr,next,prev,j;
double r;
//Fill arr[10] with random -1 & 1
a[0]=-1; a[1]=1;
for(i=0;i<10;i++){
r=rand()/(RAND_MAX+1.0)*2.0;
arr[i]=a[int(r)];
}
//Cout arr[10]
for(i=0;i<10;i++)cout<<arr[i]<<" ";
cout<<'\n';
//Repeat for 100 times
for(j=1;j<=100;j++){
r=rand()/(RAND_MAX+1.0);
r=(r)*11;
curr=int(r);
next=(curr+1)%11;
prev=(10+curr)%11;
if(arr[prev]==arr[next]){
if(arr[prev]==1)arr[curr]=1; else arr[curr]=-1;
}
else
{
r=rand()/(RAND_MAX+1.0)*2.0;
arr[curr]=a[int(r)];
}
}
//Cout arr[10]
for(i=0;i<10;i++)cout<<arr[i]<<" ";
cout<<'\n';
return 0;
}
提前致谢。
r=(r)*11;
curr=int(r);
//...
arr[curr]=//...
r
可能以低概率取值为10.X,导致curr
取值为10,将arr
分配为10,这会破坏内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.