在C中创建大型数组时出现分段错误
你们帮了我这么多的忙。让我先说一句,我不太懂C语言,我正在努力做到这一点 这是程序应该做的: 创建一个长度为1000万的随机数列表 使用shell Sort函数对随机数列表进行排序仍然无法正常工作…我想这就是我将指针传递给函数的方式 再列出100万个 重复最多1亿次,同时记录时间。由于某些原因,时间显示为0.0000000 我只是想测试这个shell排序程序和标准库中内置的快速排序程序 我试过带指针和不带指针。完成后,注释掉的部分应该可以工作。它只是把事情搞得更糟,哈哈 请帮帮我,你们到目前为止都很好在C中创建大型数组时出现分段错误,c,arrays,sorting,segmentation-fault,C,Arrays,Sorting,Segmentation Fault,你们帮了我这么多的忙。让我先说一句,我不太懂C语言,我正在努力做到这一点 这是程序应该做的: 创建一个长度为1000万的随机数列表 使用shell Sort函数对随机数列表进行排序仍然无法正常工作…我想这就是我将指针传递给函数的方式 再列出100万个 重复最多1亿次,同时记录时间。由于某些原因,时间显示为0.0000000 我只是想测试这个shell排序程序和标准库中内置的快速排序程序 我试过带指针和不带指针。完成后,注释掉的部分应该可以工作。它只是把事情搞得更糟,哈哈 请帮帮我,你们到目前为止
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
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; k<j; k++){
// random_number = rand();
// unsorted_list[k] = random_number % 1000000;
//}
printf("%d",(int)shell_results[i][0]);
printf(" ");
printf("%f",shell_results[i][1]);
printf("\n");
}
return 0;
}
void shellSort(int *A, int n){
int gap , i , j , temp;
for (gap = n/2; gap>0; gap /=2)
for (i=gap; i<n; i++)
for(j = i-gap; j>=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;i<n;i++){
if(A[i]>A[i+1]){
printf("Error in sorting \n");
break;
}
}
}
您可能没有10兆字节的堆栈空间。将该数组设为全局数组,使用static声明它,或使用malloc动态分配它。如果你选择后者,别忘了释放它
稍后,当您需要使用100000000元素数组时,请确保为其使用新的分配 您可能没有10兆字节的堆栈空间。将该数组设为全局数组,使用static声明它,或使用malloc动态分配它。如果你选择后者,别忘了释放它
稍后,当您需要使用100000000元素数组时,请确保为其使用新的分配 堆栈上不可能有那么多可用空间。使用malloc从堆中分配它。记得以后把它放出来 堆栈上不可能有那么多可用空间。使用malloc从堆中分配它。记得以后把它放出来 我应该从100000000大小的数组开始吗?还是继续制作新的?你当然可以这么做,是的。我应该从100000000大小的阵列开始吗?或者继续做新的?你当然可以这么做,是的,,,可能重复,,,可能重复