Buffer Overrun w visual studio c++

2011-07-26 20:21

Rejestracja: 9 lat temu

Ostatnio: 1 rok temu

0

program idzie skompilować i uruchomić jednak gdy ta tabela: int reka[10000][7];
dojdzie gdzies do reka[5000][7] to wyskakuje błąd 'How to debug Buffer Overrun Issues' czyli nie dz siętego programu dalej puścić niż w tej lini na ekranie pokaże się ii2 - 5000 --> printf("222222start %d , ii2 %d\n",start,ii2);

oraz nei wiem jak zadeklarować większą tablicę od tej int reka[10000][7]; na tablicę przynajmniej nt reka[1000000][7];

 #include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <windows.h>
#include <Shellapi.h>
#include <fstream>
//#pragma comment(lib, "shell32.lib")
using namespace std;

int _tmain()
{
  srand((int) time(0));
  printf("test 300 , test %d\n?", rand() % 301);  
  Sleep(rand() % 1001);
     //ShellExecuteA(NULL,"open","http://google.com",NULL,NULL, SW_SHOWNORMAL);
  int tab1[52],tab2[52],tablos[52];
  int reka[10000][7];
  int los=0;
  tab1[0]=2;
  tab1[1]=3;
  tab1[2]=4;
  tab1[3]=5;
  tab1[4]=6;
  tab1[5]=7;
  tab1[6]=8;
  tab1[7]=9;
  tab1[8]=10;
  tab1[9]=10;
  tab1[10]=10;
  tab1[11]=10;
  tab1[12]=11;
  tab1[13]=2;
  tab1[14]=3;
  tab1[15]=4;
  tab1[16]=5;
  tab1[17]=6;
  tab1[18]=7;
  tab1[19]=8;
  tab1[20]=9;
  tab1[21]=10;
  tab1[22]=10;
  tab1[23]=10;
  tab1[24]=10;
  tab1[25]=11;
  tab1[26]=2;
  tab1[27]=3;
  tab1[28]=4;
  tab1[29]=5;
  tab1[30]=6;
  tab1[31]=7;
  tab1[32]=8;
  tab1[33]=9;
  tab1[34]=10;
  tab1[35]=10;
  tab1[36]=10;
  tab1[37]=12;
  tab1[38]=11;
  tab1[39]=2;
  tab1[40]=3;
  tab1[41]=4;
  tab1[42]=5;
  tab1[43]=6;
  tab1[44]=7;
  tab1[45]=8;
  tab1[46]=9;
  tab1[47]=10;
  tab1[48]=10;
  tab1[49]=10;
  tab1[50]=12;
  tab1[51]=11;

   for(int i=0;i<10000;i++)
  {
   for(int j=0;j<7;j++)
  {
  reka[i][j]=-100;
  }
  }

std::fstream plik;
plik.open("dane.txt",std::ios::in|std::ios::out);
//if( plik.good() == true )
//{
//    std::cout << "Uzyskano dostep do pliku!" << std::endl;
    //tu operacje na pliku
//} else std::cout << "Dostep do pliku zostal zabroniony!" << std::endl;
int ii=0;
int ii2=0;
//////////////////////////////////////////////////////////////////
for (int start=0;start<370;start++)
{  
   for(int i=0;i<52;i++)
  {
  tablos[i]=-1000;
// printf("i=%d , %d\n",i ,tablos[i]); 
  }

  for(int i=0;i<52;i++)
  {
  jeszczeraz:
  tablos[i]=rand() % 52;
    for(int j=0;j<i;j++)
    {     
          if(tablos[i]==tablos[j]&&(i!=j))
          {
              goto jeszczeraz;
          }
    }
  }
   for(int i=0;i<52;i++)
  {
  tab2[i]=tab1[tablos[i]];
 printf("i=%d , %d\n",i ,tab2[i]); 

  }
///////////////////////////////////////////////

   int k=0;

    for(int ii=(0+ii2);ii<(27+ii2);ii++)
    {
        ii2++;
        if(ii2%27==0&&ii2!=0)
        goto tu;
        if(ii2%100==0)
        {
       printf("123456start %d , ii2 %d ii %d\n",start,ii2,ii); 
        system("pause");
        }
    for(int j=0;j<7;j++)
    {

        if(tab2[k]==12)
        {
        tab2[k]=0;
        }

      reka[ii+ii2][j]=tab2[k];
      k++;
        if(j==0)
        {
        reka[ii+ii2][5]=reka[ii+ii2][0];
        reka[ii+ii2][6]=reka[ii+ii2][0];
        if(reka[ii+ii2][0]==11)
        {
        reka[ii+ii2][6]=reka[ii+ii2][6]-10;
        }
        }
        if(j==1)
        {
        reka[ii+ii2][5]=reka[ii+ii2][5]+reka[ii+ii2][1];
        reka[ii+ii2][6]=reka[ii+ii2][6]+reka[ii+ii2][1];
        if(reka[ii+ii2][1]==11)
        {
        reka[ii+ii2][6]=reka[ii+ii2][6]-10;
        }
        if(reka[ii+ii2][5]==21)
        {
        j=10;
        }   
        }
        if(j==2)
        {
        reka[ii+ii2][5]=reka[ii+ii2][5]+reka[ii+ii2][2];
        reka[ii+ii2][6]=reka[ii+ii2][6]+reka[ii+ii2][2];
        if(reka[ii+ii2][2]==11)
        {
        reka[ii+ii2][6]=reka[ii+ii2][6]-10;
        }
        if(reka[ii+ii2][5]==21||reka[ii+ii2][6]==21)
        {
        j=10;
        }
        if(reka[ii+ii2][5]>21&&reka[ii+ii2][6]>21)
        {
        j=10;
        }
        }
        if(j==3)
        {
        reka[ii+ii2][5]=reka[ii+ii2][5]+reka[ii+ii2][3];
        reka[ii+ii2][6]=reka[ii+ii2][6]+reka[ii+ii2][3];
        if(reka[ii+ii2][3]==11)
        {
        reka[ii+ii2][6]=reka[ii+ii2][6]-10;
        }
        if(reka[ii+ii2][5]==21||reka[ii+ii2][6]==21)
        {
        j=10;
        }
        if(reka[ii+ii2][5]>21&&reka[ii+ii2][6]>21)
        {
        j=10;
        }
        }
        if(j==4)
        {
        reka[ii+ii2][5]=reka[ii+ii2][5]+reka[ii+ii2][4];
        reka[ii+ii2][6]=reka[ii+ii2][6]+reka[ii+ii2][4];
        if(reka[ii+ii2][4]==11)
        {
        reka[ii+ii2][6]=reka[ii+ii2][6]-10;
        }
        if(reka[ii+ii2][5]==21||reka[ii+ii2][6]==21)
        {
        j=10;
        }
        if(reka[ii+ii2][5]>21&&reka[ii+ii2][6]>21)
        {
        j=10;
        }
        }

    }

    }
    tu:
    k=0;
    if(ii2%54==0)
    {
    printf("222222start %d , ii2 %d\n",start,ii2); 
    system("pause");
    }

    if (ii2>=9990)
    goto koniec;
  } 
 koniec:
/////////////////////////
   for(int i=0;i<9990;i++)
   {
    plik <<"\n"<<i; 

      for(int j=0;j<7;j++)
       {
      plik <<"\n"<<j<<"\n"<<reka[i][j];

       }
     plik <<"\n"<<endl<<"\n";
   }

 plik.close();
 system("pause");
 return 0;
}

Pozostało 580 znaków

O_o
2011-07-26 20:59
O_o

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

0
  1. Dynamiczna alokacja pamięci.
  2. To wypełnienei tablicy... ARRGHHHH!

O̾..͠o

Pozostało 580 znaków

2011-07-27 09:56

Rejestracja: 16 lat temu

Ostatnio: 54 minuty temu

0
int reka[10000][7];

nie można tworzyć tak dużych tablic na stosie.

int tab1[52],
...
tab1[0]=2;
tab1[1]=3;
...
tab1[50]=12;
tab1[51]=11;

masakra.

int tab1[] = {2,3,4,5,6,7,8,9,10,10,10,11,....};

Pozostało 580 znaków

Kumashiro
2011-07-27 09:59
Kumashiro
0

Z tego co tu widzę, to tablica jest wypełniana sekwencjami tych samych zestawów wartości, zatem pętla byłaby bardziej na miejscu.

Jak jest sekwencja to tablica może być zbędna bo można wzorek odpowiedni zmutować zamiast niej - O_o 2011-07-28 06:06

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0