这是一个求杨辉三角的代码,我在getRow()函数里可以得到正确结果,返回到主函数输出就一直不对。
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int** getRow(int rowIndex,int* returnSize)
{
int* C[rowIndex+1];
int i,j;
*returnSize= rowIndex + 1;
for(i=1;i<=rowIndex;++i){
C[i]=(int *)malloc(sizeof(int)*(i+1));
C[i][1]=C[i][i]=1;
for(j=2;j<i;++j){
C[i][j]=C[i-1][j-1] + C[i-1][j];
}
}
int** tri = C;
for (int i = 1; i < *returnSize; i++) {
for (int j = 1; j <= i; j++) {
printf("%d ",tri[i][j]);
}
printf("\n");
}
return tri;
}
int main() {
int returnSize;
int* returnSizeP = &returnSize;
int** tri = getRow(5,returnSizeP);
printf("\n"); //删掉printf("\n");,下一段代码的输出结果又不一样。。。
for (int i = 1; i < *returnSizeP; i++) {
for (int j = 1; j <= i; j++) {
printf("%d ",tri[i][j]);
}
printf("\n");
}
}
函数出栈之后,动态变量都被释放了
可以将函数内第一句改为
int** C=(int **)malloc(sizeof(int*)*(rowIndex+1));