Sortowanie przez wstawianie i błąd "Stack overflow"

0

Piszę kod na sortowanie przez wstawianie w Microsoft Visual Studio 2013:

#include <stdio.h>
#include <stdlib.h>

void wstawianie(int tab[], int ilosc)
{
	 int i, j,x;
	 for(i=1;i<ilosc;i++) 
	{
		j=i; x=tab[j];
		while(tab[j-1]>x && j>0)
		{
			tab[j]=tab[j-1]; 
			j--;
		}
		tab[j]=x; 
                
	}
}
int main(int argc, char** argv) {

    int tab[500000];
    int ilosc,i;
    printf("podaj ilosc: ");
    scanf("%d", &ilosc);
    for(i=0;i<ilosc;i++)
        tab[i]=rand()%10;
    wstawianie(tab, ilosc);
    for(i=0;i<ilosc;i++)
        printf("%d ",tab[i]);
    
system("pause");
    return 0;
}

Po skompilowaniu wyświetla się błąd

Unhandled exception at 0x00A71657 in ProjektSortowanie.exe: 0xC00000FD: Stack overflow (parameters: 0x00000000, 0x00222000).

Po skompilowaniu w NetBeansie działa bez zarzutu.. A w MVS tylko dla mniejszych danych - do [50 000]. Dlaczego tak się dzieje i co można na to zaradzić?

dodanie znacznika <code class="none"> - @furious programming

1

stawialabym ze tablica alokowana na stosie jest za duza

int tab[500000];
0

To z pewnością, ale co zrobić z błędem jeśli potrzebuję tak dużą tablicę? I dlaczego w jednym programie działa, a w drugim już nie?

0

http://www.cplusplus.com/reference/cstdlib/malloc/

musisz zadeklarowac dynamicznie

0

rzetelnej odpowiedzi udzieli ci ktos biegly w tej technologii. mysle ze moze to wynikac z roznicy w ustawieniach domyslnych srodowiska. jesli potrzebujesz tak duzej tablicy to zaalokuj ja dynamicznie.

0
int *tab = malloc(500000 * sizeof(int));
...
free(tab);
0

najprościej dodać słowo static i po problemie.

int main(int argc, char** argv) {
 
    static int tab[500000];

W końcu main jest uruchamiane tylko raz, wiec konsekwencji negatywnych nie ma.

0

Dodany static przed deklaracją tablicy podołał zadaniu, dzięki za pomoc.

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