gpt4 book ai didi

c - malloc 内存分配的不完整类型编译错误

转载 作者:行者123 更新时间:2023-11-30 14:25:42 25 4
gpt4 key购买 nike

static char st[][8192];
void foo ( int tab_size){
st = (char**) malloc ((tab_size+1)*sizeof(char)*8192);
}

我在“malloc”行中收到编译错误,表明 st 的类型不完整。怎么了?谢谢。

最佳答案

由于您没有指定 st 内部维度的大小,编译器不知道它需要多大;因此,该类型是不完整的,并且您永远不会在malloc调用之前完成它。

由于看起来您的意图是动态分配 st,因此请遵循 Oli 的建议,并将其声明为指向 char 的 8192 元素数组的指针 :

static char (*st)[8192];

并将您的 malloc 语句重写为

st = malloc(sizeof *st * (tab_size+1));

sizeof *st == sizeof (char [8192]) == 8192。这种形式更干净,更容易阅读。另请注意,在 C 中,您不必强制转换 malloc 的结果(除非您使用的是 C89 之前的实现,在这种情况下,我很抱歉),实践是灰心。

这将分配足够的空间来容纳每个 8192 个字符的 tab_size + 1 数组。

仅在函数参数声明的上下文中,T a[]a 声明为指向 T 的指针。

关于c - malloc 内存分配的不完整类型编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10047168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com