Sortowanie w C - corrupted stack


(Ewageo) #1

Program ma sortować tablice, po odpaleniu pojawia sie debug error: stack around variable a was corrupted, co jest nie tak?

int _tmain(int argc, _TCHAR* argv[])

{

	int a[4];

	int i,b;


	printf("Prosze podac 4 elementy tablicy, zostana one posortowane rosnaco:\n");

	for(i=0; i<=4 ; ++i)

		scanf("%d",&a[i]);

	printf("Posortowane elementy tablicy:\n");

	i=0;


	while(i<=4)

	{

	if (a[i]>a[i+1])

	{

		b=a[i+1];

		a[i+1]=a[i];

		a[i]=b;

	}

	else ++i;

	}

	for(i=0; i<=4; ++i)

		printf("%d\n",a[i]);

	return 0;

}

(Scx Mail) #2

Witam.

Spróbuję pomóc Ci w rozwiązaniu tego problemu.

Widzę tutaj naruszenie stosu. Zdaje się, że przekroczyłeś tablicę. Zadeklarowałeś 4-elementową (składającą się z elementów: 0, 1, 2, 3), a próbujesz skorzystać z piątego elementu (zapisujesz element stosu poza zadeklarowanym obszarem).

Osobiście takie sortowanie wykonałbym tak:

#include 

#include 


int main (int argc, char * const argv[])

{

  int a[4]; 

  //int i, b; 


  printf("Prosze podac 4 elementy tablicy, zostana one posortowane rosnaco:\n"); 

  for(int i=0; i<4 ; ++i) //od 0 do 4 (wlacznie) masz 5 elementow: 0, 1, 2, 3 i 4; dlatego bierzemy zbior <0;4)

  scanf("%d",&a[i]); 

  printf("Posortowane elementy tablicy:\n"); 

  //i=0; 


  /*while(i<4) 

  { 

    if (a[i]>a[i+1]) 

    { 

      b=a[i+1]; 

      a[i+1]=a[i]; 

      a[i]=b; 

  } 

  else ++i; 

  }

  */


  //sortowanie babelkowe


  int wielkosc = 4; //wielkosc - rozmiar tablicy 

  bool sortuj=true;


  while(sortuj) 

  {

    sortuj = false;

	for(int b=0; b
	{

	  if(a[b]>a[b+1]) 

	  {

	    int c;

	    c=a[b];

	    a[b]=a[b+1];

	    a[b+1]=c;

	    sortuj = true;

	  }       

    }

  }


  for(int i=0; i<4; ++i) 

    printf("%d\n",a[i]); 

  return 0; 

}

Mam nadzieję, że udało mi się Tobie pomóc.

Pozdrawiam.