Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 大阵列上的分段故障_C_Arrays_Sorting - Fatal编程技术网

C 大阵列上的分段故障

C 大阵列上的分段故障,c,arrays,sorting,C,Arrays,Sorting,我正在使用快速排序来查看它订购大型阵列的速度。 我订了一百万没问题。。200万没问题。300万是一个错误。一些测试显示它崩溃在200万到210万之间,GDB显示崩溃来自“fill”函数 代码如下: int partition(int v[], int N){ int i, j; int x = v[N-1]; for(i = 0, j = 0; i < N - 1; i++){ if (v[i] < x) swap(v, j++, i); } swap

我正在使用
快速排序
来查看它订购大型阵列的速度。 我订了一百万没问题。。200万没问题。300万是一个错误。一些测试显示它崩溃在200万到210万之间,GDB显示崩溃来自“fill”函数

代码如下:

int partition(int v[], int N){

  int i, j;
  int x = v[N-1];

  for(i = 0, j = 0; i < N - 1; i++){
    if (v[i] < x) swap(v, j++, i);
  }
  swap(v, j, N - 1);
  return j;
}


void quickSort(int v[], int N){
  int p;

  if (N > 1){
    p = partition(v, N);
    quickSort(v, p);
    quickSort(v + p + 1, N - p - 1);
  }
}


void fill(int v[], int N){
  srand(clock());

  for(int i = 0; i < N; i++){
    v[i] = rand();
  }
}


int main() {

  int size = 3000000;
  int v[size];

  fill(v, size);
  printf("ready\n\n");
  quickSort(v, size);

  for(int i = 0; i < size; i++)
    printf("%d ", v[i]);

  printf("\n\nDone\n\n");

  return 0;
}
int分区(intv[],intn){
int i,j;
int x=v[N-1];
对于(i=0,j=0;i1){
p=分区(v,N);
快速排序(v,p);
快速排序(v+p+1,N-p-1);
}
}
填空(整数v[],整数N){
srand(clock());
对于(int i=0;i
是否有任何特定的原因导致代码在特定的数字处开始崩溃?
感谢您回答
int size=3000000;int v[size]
,您正在“堆栈”上创建一个局部变量。与堆相比,堆栈相当有限;因此,
3000000
可能会超过可用的堆栈大小,而例如,
3000
可能不会

要在堆上创建
v
,请编写

int *v = malloc(size);
然后,检查是否可以分配所需的空间:

if (!v) {
   printf("not enough space.");
   return 1;
}
....

int size=3000000;int v[size]
,您正在“堆栈”上创建一个局部变量。与堆相比,堆栈相当有限;因此,
3000000
可能会超过可用的堆栈大小,而例如,
3000
可能不会

要在堆上创建
v
,请编写

int *v = malloc(size);
然后,检查是否可以分配所需的空间:

if (!v) {
   printf("not enough space.");
   return 1;
}
....

哦,yhea,这很有道理。。。非常感谢你,yhea,这很有道理。。。多谢各位