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

时间:2017-10-10 07:59:44

标签: c arrays pointers malloc dynamic-memory-allocation

我有一个使用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的更多信息)

1 个答案:

答案 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),因为已经分配了s1int指针,每个指针都包含s2 int