C:访问已分配内存中的字节

时间:2014-03-26 22:42:51

标签: c malloc

我已经分配了void数组 我需要访问已分配内存的字节

void* array = (void*) malloc(12);
array[0] = 0;

它返回给我这个错误:

main.c:9: error: invalid use of void expression
     array[0] = 0;
     ^

有什么方法可以做到吗? 谢谢!

2 个答案:

答案 0 :(得分:2)

您需要使用charunsigned char而不是void来访问字节:

char *array = malloc(12);
array[0] = 0;

malloc()返回void指针,因为它不知道您要分配的类型。您无法通过void指针访问内存;你需要告诉编译器如何处理内存块。要将其视为字节,请使用charunsigned char

答案 1 :(得分:2)

您的arrayvoid - 指针。 void(在C中)表示“没有类型”。因此,当您取消引用它时(如array[0]),编译器不知道这意味着什么。

要访问字节,您需要一个char类型,这实际上是一个字节的C等价物(字符仍然适合(8位)字节的日子里的残余物)。

所以将数组声明为:

char * array = malloc(12);

另请注意,您不必转换malloc的结果(特别是在您的情况下,因为它已经返回void *)。并且,如果你只需要12个字节并且只在本地使用它们(在声明它的函数或翻译单元中),那么你可以使用'正确的数组':

char array[12];

这有额外的好处,你之后不需要free