关于c++使用malloc创建二维数组的问题


char** GetInform()
{
    char** b;
    b=(char**)malloc(sizeof(char*)*Number);            //Number是全局变量不变,主函数可获悉
    for(int i=0;ichar*)malloc(sizeof(char)*4);
    }
    for(int i=0;ifor(int j=0;j//Stack[i]是动态变化的
        {
            b[i][j]=Stack[i]._a[j];
        }
    }
    return b;
}

这个函数返回二级指针b,但我在主函数里调用这个二级指针b,并且试图输出里头的元素时,由于主函数里不知道这个二维数组的行和列,总是不能正确输出,有没有什么方法能仅通过这个b指针就获悉存入二维数组里元素的个数?

参考GPT和自己的思路:

可以在 GetInform 函数中增加一个参数,用来传递二维数组的行数。具体代码如下所示:

char** GetInform(int rowNum) {
    char** b = (char**)malloc(sizeof(char*)*rowNum);
    for (int i = 0; i < rowNum; i++) {
        b[i] = (char*)malloc(sizeof(char)*4);
    }
    for (int i = 0; i < rowNum; i++) {
        for (int j = 0; j < Stack[i]._top; j++) {
            b[i][j] = Stack[i]._a[j];
        }
    }
    return b;
}

主函数中调用 GetInform 函数时,将二维数组的行数作为参数传递进去即可:

char** arr = GetInform(Number);

这样,主函数就能够获得二维数组的行数,并正确输出元素了。

这是没有办法的,所以字符串会用\0作为标志。就是因为获取不了数组长度

在GetInform中,b[i][j]赋值之前,先将其每个元素的指针都赋值成NULL, 可通过判断b[i][j]是否为NULL来判断b指针存入二维数组里元素的个数,将非空的统计下就可以了