char ** array = malloc(sizeof(char *)* len)vs malloc(sizeof(char)* len)

时间:2014-02-13 19:08:31

标签: c

上述的分配会产生什么样的问题?如果我们分配实际数据类型的大小而不是该类型指针的大小?

对于chars而言,它是一个问题,因为sizeof(char *)> sizeof(char)?那么其他数据类型和用户定义的结构呢?

由于

3 个答案:

答案 0 :(得分:0)

通过第一个malloc函数,您正在尝试分配内存来存储指向char的指针, 但是通过第二个语句,你试图在数组中分配'char'数据类型,编译器实际上会接受它,但是如果你以后尝试访问你认为已经分配的内存将会有未定义的行为。

因此,您可能希望在右侧使用实际数据类型,作为左侧。

并且,对于问题的第二部分 - >您可以使用malloc()函数在堆上分配任何类型的内存。 例如,您可以将结构数组分配为

struct emp **array=malloc(sizeof(struct emp *)*len)

我希望这会有所帮助。

答案 1 :(得分:0)

如果您需要len个char指针的足够内存,请使用sizeof (char*)*len

这实际上只取决于你想要多少内存,但通常你希望char **指向一个或多个char *,所以你更希望len有足够的内存。 1}} char指针,几乎总是比len字符更多的内存。

答案 2 :(得分:0)

使用type *variable = malloc(sizeof(*variable) * len)并避免此问题。

示例:char ** array = malloc(sizeof(*array) * len);


char ** array = malloc (sizeof (char*)*len)正确分配内存。

char ** array = malloc (sizeof (char)*len)只能在sizeof(char) == sizeof(char*)时正确分配足够的内存,除非在特殊平台上,否则肯定是假的。