stack corrupt... warum?

quaker23

Grünschnabel
Hallo,
ich bekommen folgende Fehlermeldung in der nach beendigung meines Programmes:
"Run-Time Check Failure #2 - Stack around the variable 'user' was corrupted"

Ich glaube der Fehler liegt in der Funktion "berechne_beitrag_extremum. Hatte die Funktion vorher auch viel schöner geschrieben und habe sie aufgrund des Fehlers so geändert wie ihr sie jetzt seht aber der Fehler bleibt.
Wenn ihr den Code nicht durchgehen wollt gebt mir doch bitte einen Tipp was denn dieser Fehler genau bedeutet. Bin mir da nicht sicher aber könnte es ein Überlauf sein?

Danke im voraus!

Hier der Code:
Code:
// datenbank.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
  //
  
  #include "stdafx.h"
  #include "iostream"
  #include "conio.h"
  #include "process.h"
  
  using namespace std;
  
  
 struct member							 //datenstruktur der benutzer
  {
     char name[30];
     char vorname[20];
     char email[60];
     char wohnort[20];
     int beitraege;
     char icq[10];
  
  };
  
  
  int berechne_beitrag_extremum(member user[],const sizeofusers,bool mode)  //max/minimale beiträge berechnen
  {   int i=0;
  	int temp=i+1;
  	int beitraege[2];
  	while(i<sizeofusers)
  	{
  		beitraege[i]=user[i].beitraege;
  		i++;
  	}
  	i=0;
  	while(i<sizeofusers && temp<sizeofusers)
  	{
  		if(mode)
  		{
  			if(beitraege[i]>beitraege[temp])
  			   temp++;
  			else
  			{
  				i=temp;
  				temp++;
  			}
  		}
  		else
  		{
  		
  			if(beitraege[i]<beitraege[temp])
  			   temp++;
  			else
  			{
  				i=temp;
  				temp++;
  			}
  		}
  	}
  	return beitraege[i];
  }
  
  
  int berechne_durchschnitt(member user[],const sizeofusers)
  {   int posts=0;
  	for(int i=0;i<sizeofusers;i++)
  	{
  	   posts=posts+user[i].beitraege;
  	}
  	
  	return posts/sizeofusers;
  }
  
  void eingabe(member user[],int sizeofusers)
  {   system("cls");
  	for(int i=0;i<sizeofusers;i++)
    {
  	cout<<"bitte geben sie ihren namen an: ";
  	cin>>user[i].name;
  	cout<<"bitte geben sie ihren vornamen an: ";
  	cin>>user[i].vorname;
  	cout<<"bitte geben sie ihre email an: ";
  	cin>>user[i].email;
  	cout<<"bitte geben sie ihren wohnort an: ";
  	cin>>user[i].wohnort;
  	cout<<"bitte geben sie ihre beitraege an: ";
  	cin>>user[i].beitraege;
  	cout<<"bitte geben sie ihre ICQ nummer an: ";
  	cin>>user[i].icq;
    }
  }
  
  void berechnungen(int statistik[],member user[],const sizeofusers)
  {   
  	statistik[0]=berechne_durchschnitt(user,sizeofusers);
  	statistik[1]=berechne_beitrag_extremum(user,sizeofusers,0);
  	statistik[2]=berechne_beitrag_extremum(user,sizeofusers,1);
  }
  
  
  
  int _tmain(int argc, _TCHAR* argv[])
  {  
     const sizeofusers=2;
     member user[sizeofusers-1];
     int statistik[3];
     eingabe(user,sizeofusers);
     berechnungen(statistik,user,sizeofusers);
     cout<<"durchschnitt der beitraege: "<<statistik[0]<<endl;
     cout<<"minimale beitraege: "<<statistik[1]<<endl;
     cout<<"maximale beitraege: "<<statistik[2]<<endl;
     system("pause");
  	return 0;
  }
 
moin


Der Fehler liegt dort:
Code:
const sizeofusers=2;
eingabe(user,sizeofusers-1);
berechnungen(statistik,user,sizeofusers);
Du liesst einen User mehr ein, als du Speicher reservierst.
Also am einfachsten wäre es das -1 weg zu nehmen.


mfg
umbrasaxum
 
wenn du ein Array anlegst z.B. users[2] dann hat das Array 2 Felder begonnen mit 0 - also users[0] und users[1].
du initialisierst hier ein Array mit nur einem Feld (2-1) - also nur users[0]
 
Zurück