使用malloc的C中的错误:corrupted size vs prev_size

前端之家收集整理的这篇文章主要介绍了使用malloc的C中的错误:corrupted size vs prev_size前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我找到了 python的答案,但我不明白.

代码修改后的合并排序.对于我检查到的少量输入,它工作得很好.但是当我通过在线判断运行时,当输入数量很高(500)时,它给了我这个错误

Error in 'a.out': corrupted size vs. prev_size: 0x0000000000d5b8b0
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7f3b83a5b7e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x80dfb)[0x7f3b83a64dfb]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7f3b83a6853c]
a.out[0x4009d1]
a.out[0x400ac7]
a.out[0x400a87]
a.out[0x400aa4]
a.out[0x400a87]
a.out[0x400bc7]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f3b83a04830]
a.out[0x4005b9]
======= Memory map: ========

它还有15行.为什么我收到此错误?是因为我在使用malloc动态分配内存时出现的一些错误

这是我的代码

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

void *Merge(int *A,int l,int m,int r,int *B,int *F);
void *Merge(int *A,int *F){
  int i=l,j=m,k=0,*C,x,y=l,z,cSize,temp,*D,*E;

  cSize = r-l;
  C = (int *) malloc (cSize * sizeof(int));
  D = (int *) malloc (cSize * sizeof(int));
  E = (int *) malloc (cSize * sizeof(int));

  while (k < cSize){
    if((j==r) || ((i!=m) && ((A[j]*B[i]) >= (A[i]*B[j])))){
        C[k] = A[i];
        D[k] = B[i];
        E[k] = F[i];
        i++;
        k++;
    }
    if((i>=m) || ((j!=r) && ((A[j]*B[i]) < (A[i]*B[j])))){
        C[k] = A[j];
        D[k] = B[j];
        E[k] = F[j];
        j++;
        k++;
    }
  }
  for(x=0;x<k;x++){
    A[y] = C[x];
    B[y] = D[x];
    F[y] = E[x];
    y++;
  }
  free(C);
  free(D);
  free(E);
}

void *MergeSort(int *A,int left,int right,int *C);
void *MergeSort(int *A,int *C){
  int mid,i,j,l=0,*R,*L;
  if(right - left == 1){
    A[left] = A[left];
  }
  if(right-left > 1){
    mid = (left+right)/2;

    MergeSort(A,left,mid,B,C);
    MergeSort(A,right,C);

    Merge(A,C);
  }
}

int main(){
  int n,i=0,newNumt,newNumo,*a,*b,*c;

  scanf("%d",&n);
  a = (int *) malloc (n * sizeof(int));
  b = (int *) malloc (n * sizeof(int));
  c = (int *) malloc (n * sizeof(int));

  for(i=0;i<n;i++){
    scanf("%d %d",&a[i],&b[i]);
    c[i]= i+1;
  }
  MergeSort(a,n,b,c);
  for(i=0;i<n;i++){
    printf("%d\n",c[i]);
  }

  return 0;
}

解决方法

我不知道它是否可以提供帮助,但是这里有QuickSort的代码,根据Google的说法,它比MergeSort更好:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Swap(int array[],int i,int j)
{
  int temp;
  temp = array[i];
  array[i] = array[j];
  array[j] = temp;
}


void QuickSort(int array[],int beg,int end)
{
  int pivot,k,e;

    while(beg < end)
    {
      b = beg; k = (beg+end)/2; e = end;
      pivot = array[k];

      while(1)
      {
        while((b <= e) && (array[b] <= pivot)) b++;
        while((b <= e) && (array[e] > pivot)) e--;

        if(b > e) break;


      Swap(array,e);

        if(k == e) k = b;

        b++; e--;

      }
      array[k]=array[e];
      array[e]=pivot;
      e--;

      if((e-beg)<(end-b))
      {
        QuickSort(array,beg,e);
        beg = b;
      }
      else
      {
        QuickSort(array,end);
        end = e;
      }

    }

  return ;
}

void display(int * array,int n)
{
 for(int i = 0; i < n ; i++)
 {
   printf("%d\n",array[i]);
 }
}


int main()
{
  int array[] = {1,2,77,5,42,33,4,12,21,55};

  QuickSort(array,sizeof(array)/sizeof(int));

  display(array,sizeof(array)/sizeof(int));


  return 0;
}

也许问题存在于main函数中,您应该传递您尝试使用sizeof(array)/ sizeof(int)排序的数组的大小.看看它是否有帮助.

猜你在找的C&C++相关文章