我已经分配了void数组 我需要访问已分配内存的字节
void* array = (void*) malloc(12);
array[0] = 0;
它返回给我这个错误:
main.c:9: error: invalid use of void expression
array[0] = 0;
^
有什么方法可以做到吗? 谢谢!
答案 0 :(得分:2)
您需要使用char
或unsigned char
而不是void
来访问字节:
char *array = malloc(12);
array[0] = 0;
malloc()
返回void
指针,因为它不知道您要分配的类型。您无法通过void
指针访问内存;你需要告诉编译器如何处理内存块。要将其视为字节,请使用char
或unsigned char
。
答案 1 :(得分:2)
您的array
是void
- 指针。 void
(在C中)表示“没有类型”。因此,当您取消引用它时(如array[0]
),编译器不知道这意味着什么。
要访问字节,您需要一个char
类型,这实际上是一个字节的C等价物(字符仍然适合(8位)字节的日子里的残余物)。
所以将数组声明为:
char * array = malloc(12);
另请注意,您不必转换malloc
的结果(特别是在您的情况下,因为它已经返回void *
)。并且,如果你只需要12个字节并且只在本地使用它们(在声明它的函数或翻译单元中),那么你可以使用'正确的数组':
char array[12];
这有额外的好处,你之后不需要free
。