我有一个使用malloc指针的模拟2D数组,我想获得该数组的大小,因为sizeof()返回指针的大小。 我的代码(ANSI C):
void main(){
int s1=10;
int s2=15;
int ** rack=(int**)malloc(s1*sizeof(int**));
for(int i=0; i<s1; i++) rack[i]=(int*)malloc(s2*sizeof(int*));
}
我想要一个功能(可以通过系统,可以自己做)这样:
size(rack) //returns 10
size(rack[0]) //returns 15
提前致谢! (有关我使用GNU / Linux的更多信息)
答案 0 :(得分:0)
首先,为2D阵列分配内存的方式是错误的。您需要将其更改为:
void main(){
int s1 = 10;
int s2 = 15;
int** rack = malloc(s1*sizeof(int*));
if (rack == NULL)
return;
for(int i=0; i<s1; i++) {
rack[i]=malloc(s2*sizeof(int));
if (rack[i] == NULL)
return;
}
...
free(rack);
return;
}
请记住始终check malloc's result以及not to cast malloc's result。
为了获得数组的大小,您可以打印s1*s2*sizeof(int)
,因为已经分配了s1
个int
指针,每个指针都包含s2
int
第