读书人

在才中递归使用同名指针分配内存是否有

发布时间: 2012-05-28 17:59:33 作者: rapoo

在才中递归使用同名指针分配内存是否有可能存在问题
我写了一个插入排序和合并排序的小程序,,
然后,运行的时候,发觉每次都会出现
debug error
错误显示,DAMAGE:beforeNormalblock(#44)at 0x00380970
然后我忽略,就会排序,问题是,排序后的大部分都是真确的,有个别错误,,
我想问一下,是什么原因,,是不是我在递归使用同名指针分配内存,和释放内存导致的结果,
当我 把释放内存去掉后,确实会没有错误提示,虽然结果依然不正确,
我想问下,是不是不能在递归使用同名指针分配内存啊,

C/C++ code
#include<stdio.h>#include<stdlib.h>#define N 200void Inser ( int num[], int size ) ;void Merge ( int num[], int size ) ;int main( void ){    int i = 0 ;    int arr[N]={2,8,5,1,2,4,15,65,12,54,125,112,5,1,5558,224,2125,15521,241,2255,\        2,8,5,1,2,4,15,65,12,54,125,112,5,1,5558,224,2125,15521,241,2255,\        2,8,5,1,2,4,15,65,12,54,125,112,5,1,5558,224,2125,15521,241,2255,\        2,8,5,1,2,4,15,65,12,54,125,112,5,1,5558,224,2125,15521,241,2255,\        2,8,5,1,2,4,15,65,12,54,125,112,5,1,5558,224,2125,15521,241,2255,\        2,8,5,1,2,4,15,65,12,54,125,112,5,1,5558,224,2125,15521,241,2255,\        2,8,5,1,2,4,15,65,12,54,125,112,5,1,5558,224,2125,15521,241,2255,\        2,8,5,1,2,4,15,65,12,54,125,112,5,1,5558,224,2125,15521,241,2255,\        2,8,5,1,2,4,15,65,12,54,125,112,5,1,5558,224,2125,15521,241,2255,\        2,8,5,1,2,4,15,65,12,54,125,112,5,1,5558,224,2125,15521,241,2255,\    } ;    Merge ( arr, sizeof(arr)/sizeof(int) ) ;    for( ; i < N; i++)    {        printf("%d\n",arr[i]);    }}//插入排序void Inser ( int num[], int size ){    int x ;    int i ;    int key ;    int l = size ;    for(x = 1; x < l; x++)    {        key = num[x] ;        i = x - 1 ;        while ( i >= 0 && num[i] > key)        {            num[i+1] = num[i] ;            i-- ;        }        num[i+1] = key ;    }} //合并排序void Merge ( int num[], int size ){    int *p = (int *) malloc ( sizeof(int) * ( size/2) ) ;    int *q = (int *) malloc ( sizeof(int) * (size-size/2) );    int i;    int x = size/2 - 1, y = size - size/2 - 1 ;    int k = 0, z = 0, s = 0 ;//分解    if ( size >= 100 )    {        for(i = 0; i < size/2; i++)        {            p[i] = num[i] ;        }        Merge( p, size/2) ;        for(    ; i < size; i++ )        {            q[i-size/2-1] = num[i] ;        }        Merge(q, size-size/2) ;    }//调用插入排序    if ( size <= 100 )    {        Inser ( num, size ) ;        return 0;    }//合并    while( x != 0 || y != 0 )    {        if( 0 == x )        {            num[s] = q[z] ;            s++ ;            z++ ;            y-- ;            continue ;        }        else if ( 0 == y)        {            num[s] = q[k] ;            s++ ;            k++ ;            x-- ;            continue ;        }        if( p[k] < q[z] )        {            num[s] = p[k] ;            k++ ;            x-- ;            s++ ;        }        else        {            num[s] = p[z] ;            z++ ;            y-- ;            s++ ;        }    }    free(p) ;    free(q) ;}


[解决办法]
应该不会。感觉是循环变量控制错误。

读书人网 >C语言

热点推荐