我试图制作一个使用二维数组作为其级别基础的游戏。但是,它的大小需要能够在不同层次上变化。 经过一番研究,我发现this question似乎与我有同样的问题。我试过尽可能地应用它:在结构中的多维动态数组,大小由int在同一个struct中定义的大小C
typedef struct level{
/*other stuff*/
int Size;
int Arr[0][0];
}level;
level InitLevel(int S){
struct level* N = malloc(sizeof(level)+S*S*sizeof(int));
N->Size=S;
int i,j;
for(i=0;i<S;i++){
for(j=0;j<S;j++){
N->Arr[i][j]=0;
}
}
return *N;
}
编译得很好,所以就是这样。问题是,在主一次,看起来大约是这样的:
int main(){
level myLevel = InitLevel(10);
printf("%i \n",myLevel.Size);
printf("%i \n",myLevel.Arr[5][5]);
}
虽然myLevel.Size返回正确的值,原来数组的值不正确地设置为0,而不是返回似乎是要么胡言乱语或记忆地址。
我不确定我做错了什么,但我希望我离解决方案不远?帮助将不胜感激。
'int arr [0] [0];'停在这里。删除这一行。 C中的数组不以这种方式工作。链接问题中的什么让你相信你可以做到这一点? –
'N = malloc(...);返回* N'; C中的动态分配也不会以这种方式工作。 –