Error de segmentación al crear matrices grandes en C

Ustedes me han ayudado mucho con este código. Permítanme prólogo diciendo que no conozco muy bien a C y estoy tratando realmente de hacer esto.

Esto es lo que el progtwig debería hacer:

1) Cree una lista de números aleatorios de 10 millones de longitud 2) Ordene la lista de números aleatorios usando la función de clasificación de shell (aún no funciona correctamente … creo que es como paso el puntero a la función) 3) Haga una lista 1 millón más largo

4) repite hasta 100 millones durante el tiempo de grabación (el tiempo aparece como 0.0000000 por alguna razón)

Solo estoy tratando de probar este progtwig de ordenamiento de shell versus clasificación rápida integrada en la biblioteca estándar.

Lo he intentado con y sin punteros … la sección comentada debería funcionar cuando está hecha … Simplemente arruina las cosas más jajaja

Por favor, ayúdenme, ustedes han sido tan buenos hasta ahora …

#include  #include  #include  void shellSort(int *A, int n); void checkSort(int *A, int n); int main(){ /*Initialize Random Array*/ int unsorted_list[10000000]; int *ptr = &unsorted_list[0]; int random_number; int i; srand ( time(NULL) ); for(i=0; i<10000000; i++){ random_number = rand(); unsorted_list[i] = random_number % 10000000; } //Do C Shell Sort double shell_results[10][2]; double clock_diff; int j=10000000; clock_t t0, t1; int k; for(i=0;i<10;i++){ /*Sort the list using shellSort and take the time difference*/ t0 = clock(); shellSort(ptr, j); t1= clock(); /*Take difference in time*/ clock_diff = (t1 - t0)/CLOCKS_PER_SEC; /*Add time and list length to the results array*/ shell_results[i][0] = (double)j; shell_results[i][1] = clock_diff; /*Check to make sure the array has been sorted*/ checkSort(ptr, j); /*Re-initialize a longer array*/ //j+=1000000; //for(k=0; k0; gap /=2) for (i=gap; i=0 && A[j] > A[j+gap]; j-=gap){ temp = A[j]; A[j] = A[j + gap]; A[j + gap] = temp; } } void checkSort(int *A, int n){ int i; for(i=0;iA[i+1]){ printf("Error in sorting \n"); break; } } } 

Probablemente no tengas 10 megabytes de espacio de stack. Haga que esa matriz sea global, explíquela con static o asignela dinámicamente utilizando malloc() . Si eliges el último, no te olvides de free() .

Más tarde, cuando necesite usar la matriz de elementos 100.000,000, ¡asegúrese de usar una nueva asignación para ella!

Bueno, no hay forma de que tengas esa cantidad de espacio disponible en la stack. Asócielo del montón usando malloc (). Recuerde liberarlo () después.