C语言 使用 malloc 获取模拟数组的大小



我有一个使用带有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)

首先,为 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;
}

请记住始终检查 malloc 的结果,也不要转换 malloc 的结果。

为了获得数组的大小,您可以打印s1*s2*sizeof(int),因为您已将s1指针分配给int,每个指针都包含s2 int

最新更新