***堆栈粉碎在C ++数组程序中检测到***

时间:2016-11-30 16:07:37

标签: c++

我正在编写一个简单的程序来模拟关于电子自旋的真实世界物理问题。 它应该随机填充10或1或-1的数组。然后100次选择一个元素并根据它的邻居进行以下转换:

+-+ ..... +++
-+- ..... ---
+++ ..... +++
--- ..... ---

并在以下情况下随机选择一个结果:

-++ ..... --+ or -++
--+ ..... --+ or -++
+-- ..... ++- or +--

但是当我运行它时,我收到此错误: 检测到 *堆栈粉碎* :./a.out已终止 中止(核心倾销)

我查了一下,最后一次"否则"两行。当我发表评论时,它不会给出错误。

我的代码:

#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;
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

    r=(r)*11;
    curr=int(r);
    //...
    arr[curr]=//...

r可能会以低概率取值10.X,导致curr取值为10,分配给arr为10,这会破坏内存。