谢了一个方法,感觉很奇怪,大家看看问题出在哪里了。
这个是有问题的方法,该方法用了gcc的一个扩展库方法asprintf(),需要注意一下。程序代码:
void DebugIntArrayVar(char * label,char * varName,int * value,int rows,int cols) { char * debugFilePath=DEBUG_FILE_PATH; char * newContent; char * oldContent; asprintf(&newContent,"Label %s :\n",label); oldContent=newContent; asprintf(&newContent,"%s%s :\n",oldContent,varName); free(oldContent); oldContent=newContent; int i,j; for(i=0;i<rows;i++) { for(j=0;j<cols;j++) { asprintf(&newContent,"%s\t%d",oldContent,value[i*cols+j]); free(oldContent); // 经调试此处报错。 oldContent=newContent; } asprintf(&newContent,"%s\n",oldContent); free(oldContent); oldContent=newContent; } AttachToFile(debugFilePath,oldContent); // 该方法用于将字符串写进文件中,可以注释掉。 free(oldContent); return; }
在下面这个main()方法中调用没有问题
程序代码:
int main(void) { int intArrayVar2[][10]={{1,2,3,4,5,6,7,8,9,10},{11,12,13,14,15,16,17,18,19,20}}; DebugIntArrayVar("27","intArray2",&intArrayVar2[0][0],2,3); return 0; }
但在下面这个main()方法中调用就有问题了。
这个方法也没做什么事情,没有实现完成,就是做了个计算“9876”*“9876”这样的运算。大概思路是用我们常用的竖式乘法的方法计算。没什么含金量,就是为了测试那个让人郁闷的方法正确不。
程序代码:
#define MAXBIT 1024 int main(void) { char r[MAXBIT]; int n; int r_len; int temp; char * base; int i,j,k; int * result_temp; int * result; strcpy(r,"9876"); r_len=strlen(r); base=(char *)malloc(r_len+1); for(i=0,j=r_len-1;i<r_len;i++,j--) { base[j]=r[i]; } result_temp=(int *)malloc(2*r_len-1); for(k=0;k<r_len;k++) { temp=0; i=k; j=0; while(i>=0) { temp+=(base[i]-'0')*(base[j]-'0'); i--; j++; } result_temp[k]=temp; } for(k=1;k<r_len;k++) { temp=0; i=r_len-1; j=k; while(i>=0&&j<r_len) { temp+=(base[i]-'0')*(base[j]-'0'); i--; j++; } result_temp[r_len+k-1]=temp; } // debug code DebugIntArrayVar("63","result_temp",&result_temp[0],1,2*r_len-1); result=(int *)malloc(2*r_len); for(i=0;i<2*r_len-1;i++) { result[i]=result_temp[i]; } result[2*r_len-1]=0; for(i=0;i<2*r_len-1;i++) { result[i+1]+=result[i]/10; result[i]%=10; } for(i=2*r_len-1;i>=0;i--) { printf("%d",result[i]); } printf("\n"); return 0; }
调试了半天没搞懂为什么多了。但是在标红的地方报的错。希望哪位朋友帮我看看,找找原因,最好能把代码改一下。
[ 本帖最后由 八画小子 于 2014-10-24 02:33 编辑 ]