在才中递归使用同名指针分配内存是否有可能存在有关问题
在才中递归使用同名指针分配内存是否有可能存在问题
我写了一个插入排序和合并排序的小程序,,
然后,运行的时候,发觉每次都会出现
debug error
错误显示,DAMAGE:beforeNormalblock(#44)at 0x00380970
然后我忽略,就会排序,问题是,排序后的大部分都是真确的,有个别错误,,
我想问一下,是什么原因,,是不是我在递归使用同名指针分配内存,和释放内存导致的结果,
当我 把释放内存去掉后,确实会没有错误提示,虽然结果依然不正确,
我想问下,是不是不能在递归使用同名指针分配内存啊,
------解决方案--------------------
应该不会。感觉是循环变量控制错误。
我写了一个插入排序和合并排序的小程序,,
然后,运行的时候,发觉每次都会出现
debug error
错误显示,DAMAGE:beforeNormalblock(#44)at 0x00380970
然后我忽略,就会排序,问题是,排序后的大部分都是真确的,有个别错误,,
我想问一下,是什么原因,,是不是我在递归使用同名指针分配内存,和释放内存导致的结果,
当我 把释放内存去掉后,确实会没有错误提示,虽然结果依然不正确,
我想问下,是不是不能在递归使用同名指针分配内存啊,
- C/C++ code
#include<stdio.h> #include<stdlib.h> #define N 200 void 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) ; }
------解决方案--------------------
应该不会。感觉是循环变量控制错误。