C使用malloc时出错:malloc.c:2451:sYSMALLOc“Assertion Failed”

时间:2014-02-21 19:38:32

标签: c pointers malloc

我是C的初学者并且遇到内存分配问题。我检查了相关的讨论。我应该使用Valgrind,但直到我学习如何使用它,我才在这里发布问题。

这是我制作的合并排序代码的链接。 http://ideone.com/utEzoq

然而,主要问题似乎在以下部分:

void main()
{
     MergeSort(list, 0, n-1) //calling function on pointer to array of integers
}

int *MergeSort(int *A, int x, int y) //declaration
{
if(x==y)
{
    return A;
}

else
{
    int size=1+y-x;
    int half=(x+y)/2;

    MergeSort(A, x, half);  
    MergeSort(A, half+1, y);    


    int *C;
    C=(int *)malloc(size*sizeof(int));
    int j=x;
    int k=half;
    int i=0;


    while((j<=half)||(k<=y))            
    {
        if(A[j]<=A[k])
        {
            C[i]=A[j];
            j++;
        }
        else
        {
            C[i]=A[k];
            k++;
        }
        i++;
    }


    if(j==(half+1))
    {
        while(i<size)
        {
            C[i]=A[k];
            i++;
            k++;
        }
    }
    else if(k==(y+1))
    {
        while(i<size)
        {
            C[i]=A[j];
            i++;
            j++;
        }
    }

    return C;
}

然而,错误产生于不同类型的输入。当我输入反向排序和排序数组时,它按输入顺序返回输出。随机数字给出了malloc&#34; Assertion Failed&#34;错误。

非常感谢帮助。

2 个答案:

答案 0 :(得分:0)

您在第一个C循环中写入超出数组长度的while元素,从而可能损坏mallocfree内部使用的信息。

整个实施都有错误。例如,您递归调用排序函数并为每次调用分配辅助内存。你返回分配的缓冲区,但从不对它做任何事情,更不用说free了。排序函数不排序,因为排序的数据(假设)在C中,您忽略。您有效地打印出A

编辑:没有必要学习 Valgrind。安装它,使用-g编译程序,然后使用Valgrind运行程序。除了输出之外,您还会收到错误和警告消息,清楚地说明发生何种内存违规的位置。现在安装Valgrind并养成使用它的习惯 - 它将为您节省时间。

答案 1 :(得分:0)

你的问题

void main()

int main()

int k=half;

int k=half+1;

while((j<=half)||(k<=y)) 

while((j<=half)&&(k<=y))

return C;

for(i=0;i<size;++i){
    A[x+i]=C[i];
}
free(C);
return A;