簡體   English   中英

***在C ++數組程序中檢測到堆棧粉碎***

[英]*** 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM