今日在运行如下程序时出现以上问题:
#include<stdio.h> #include<stdlib.h> #define N 3 int main() { int arr[N][N]={NULL}; int *p=NULL; int *ConvertFun(int(*)[N]); int i,j; printf("please input the orginal matrix:\n"); for(i=0;i<N;i++) for(j=0;j<N;j++) scanf("%d",arr[i]+j); p=ConvertFun(arr); printf("the convert matrix is:\n"); for(i=0;i<N;i++) { for(j=0;j<N;j++) printf("%d ",*p++); printf("\n"); } free(p); return 0; } int *ConvertFun(int(*p)[N]) { int* arr=(int*)malloc(N*N*sizeof(int)); int i,j; for(i=0;i<N;i++) for(j=0;j<N;j++) *(arr+i*N+j)=p[j][i]; return arr; }
后来发现堆中的初始地址p由最开始移动到最末尾,free()释放的不再是malloc空间(即存在两个断点,子函数arr的开头及结尾),故需要将*p++改为*(p+i*N+j),那么问题就得到解决。
时间: 2024-11-05 18:44:16