Ich schreibe ein einfaches Programm, das ein physikalisches Problem der realen Welt über Elektronenspin simuliert. Es sollte ein Array von 10 mit 1 oder -1 zufällig füllen. dann für 100-mal ein Element auswählen und die folgende Umwandlung tun, basierend auf seine Nachbarn:*** stack smashing detected *** in einem C++ Array-Programm
+-+ ..... +++
-+- ..... ---
+++ ..... +++
--- ..... ---
und in den folgenden Fällen zufällig ein Ergebnis holen:
-++ ..... --+ or -++
--+ ..... --+ or -++
+-- ..... ++- or +--
etc
aber wenn ich laufe es mir diesen Fehler: * Stack * erkannt Zerschlagung: ./a.out abgebrochen (core dumped) beendete
012.351.Ich habe überprüft und es ist auf der letzten "else" zwei Zeilen. Es gibt keinen Fehler, wenn ich sie kommentiere.
Mein Code:
#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;
}
Vielen Dank im Voraus.
'prev = (10 + curr)% 11;' hat möglichen Wert zwischen '[0-10]'. Aber in C beginnt der Array-Index bei 0. Wenn arr 10 Elemente hat, ist der mögliche Index "[0-9]". Also 'arr [prev]' könnte außerhalb der Grenzen sein – Fefux