char **init(int n) {
char **result;
result = malloc(n * sizeof(char));
return result;
}
我需要帮助了解第三行是否是错误。对 malloc() 的调用将在堆上的内存上创建 N 个连续的 block ,每个 block 都足够大以存储单个字符,并且它将返回一个 void ptr(数组的基地址)。但是,result 是一个指向指针的指针,因此它需要存储另一个指针的地址,但这里不是这种情况?
最佳答案
也许您想做这样的事情:
char *init(unsigned int n) {
char *result;
/* allocate the memory */
result = malloc(n * sizeof(char));
return result;
}
这将分配内存来存储 n 个连续的字符。
您可以将代码减少为:
char *init(int n) {
return malloc(n * sizeof(char));
}
或者您可以直接执行以下操作,而不是调用此函数:
malloc(n * sizeof(char));
或者你可以创建一个宏
#define INIT_CHAR_ARR(n) malloc((n) * sizeof(char))
如果你想要n个连续的字符指针:
malloc(n * sizeof(char*))
如果您解释了您的最终目标,这将有助于我们帮助您,也许有更好的方法来完成您正在做的事情。
关于调用 malloc 并将返回值存储在双指针中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55602342/