C语言中一个函数返回值不一致的问题
对于一个只用C写十几二十行程序的菜鸟,也能遇到这样那样诡异郁闷的问题,其实知道点底层也挺好的。先说这个问题:
#include <stdio.h>#include <malloc.h>#define max(a,b) ((a)>(b)?(a):(b))int computeMax(int [], int);int main() { int array[10] = {1,-1,2,2,3,-3,4,-4,5,-5}; /*printf("\n");*/ printf("%d\n", computeMax(array, 10)); return 0;} int computeMax(int a[], int length) { int i,j,result; int la[length-1], ra[length-1]; la[0] = a[0],ra[length-2] = a[length-1]; for(i=1;i<length-2;i++) la[i] = max(la[i-1]+a[i], a[i]); for(i=length-3;i>=0;i--) ra[i] = max(ra[i+1]+a[i+1], a[i+1]); result = la[0]+ra[1]; for(i=0;i<length-1;i++) for(j=i;j<length-1;j++) result = max(la[i]+ra[j], result); return result;}int computeMax(int a[], int length) { int i,j,result; int *la=(int *)malloc((length-1)*sizeof(int)), *ra=(int *)malloc((length-1)*sizeof(int)); la[0] = a[0],ra[length-2] = a[length-1]; for(i=1;i<length-2;i++) la[i] = max(la[i-1]+a[i], a[i]); for(i=length-3;i>=0;i--) ra[i] = max(ra[i+1]+a[i+1], a[i+1]); result = la[0]+ra[1]; for(i=0;i<length-1;i++) for(j=i;j<length-1;j++) result = max(la[i]+ra[j], result); free(la); free(ra); return result;}#include <stdio.h>#include <malloc.h>#define max(a,b) ((a)>(b)?(a):(b))int computeMax(int [], int);int main() { int array[10] = {1,-1,2,2,3,-3,4,-4,5,-5}; int a = computeMax(array,10); /*printf("\n");*/ printf("%d\n", a); return 0;} int computeMax(int a[], int length) { int i,j,result; int la[length-1], ra[length-1]; la[0] = a[0],ra[length-2] = a[length-1]; for(i=1;i<length-2;i++) la[i] = max(la[i-1]+a[i], a[i]); for(i=length-3;i>=0;i--) ra[i] = max(ra[i+1]+a[i+1], a[i+1]); result = la[0]+ra[1]; for(i=0;i<length-1;i++) for(j=i;j<length-1;j++) result = max(la[i]+ra[j], result); return result;}