C:访问位置不正确的内存中的字节
我已经分配了一个空数组 我需要访问已分配内存的字节C:访问位置不正确的内存中的字节,c,malloc,C,Malloc,我已经分配了一个空数组 我需要访问已分配内存的字节 void* array = (void*) malloc(12); array[0] = 0; 它会返回以下错误: main.c:9: error: invalid use of void expression array[0] = 0; ^ 有办法吗? 谢谢 您需要使用char或unsigned char而不是void来访问字节: char *array = malloc(12); array[0] = 0; mal
void* array = (void*) malloc(12);
array[0] = 0;
它会返回以下错误:
main.c:9: error: invalid use of void expression
array[0] = 0;
^
有办法吗?
谢谢 您需要使用
char
或unsigned char
而不是void
来访问字节:
char *array = malloc(12);
array[0] = 0;
malloc()
返回一个void
指针,因为它不知道您正在分配的类型。您不能通过void
指针访问内存;您需要告诉编译器如何处理内存块。要将其视为字节,请使用char
或unsigned char
您需要使用char
或unsigned char
而不是void
来访问字节:
char *array = malloc(12);
array[0] = 0;
malloc()
返回一个void
指针,因为它不知道您正在分配的类型。您不能通过void
指针访问内存;您需要告诉编译器如何处理内存块。要将其视为字节,请使用字符
或无符号字符
您的数组
是一个无效
-指针。而void
(在C中)表示“没有类型”。因此,当您取消引用它时(如数组[0]
),编译器不知道这意味着什么
要访问字节,您需要一个char
类型,它实际上是一个字节的C等价物(字符仍然可以放入(8位)字节的年代的残余)
因此,将数组声明为:
char * array = malloc(12);
还请注意,您不必强制转换malloc
的结果(尤其是在您的情况下,因为它已经返回了void*
)。而且,如果您只需要12个字节,并且只在本地使用它们(在声明它的函数或转换单元中),那么您可以使用“适当的数组”:
char array[12];
这增加了一个额外的好处,即您不需要在
之后释放它。您的数组
是一个无效
-指针。而void
(在C中)表示“没有类型”。因此,当您取消引用它时(如数组[0]
),编译器不知道这意味着什么
要访问字节,您需要一个char
类型,它实际上是一个字节的C等价物(字符仍然可以放入(8位)字节的年代的残余)
因此,将数组声明为:
char * array = malloc(12);
还请注意,您不必强制转换malloc
的结果(尤其是在您的情况下,因为它已经返回了void*
)。而且,如果您只需要12个字节,并且只在本地使用它们(在声明它的函数或转换单元中),那么您可以使用“适当的数组”:
char array[12];
这还有一个额外的好处,那就是你以后不需要释放它。所以当我创建了void指针时,我必须创建第二个char指针?@Peter:指针必须指向实际类型,然后你才能跟随它读写它所指向的内存。所以当我创建了void指针时,我必须创建第二个字符指针?@Peter:指针必须指向实际类型,然后才能跟随它读取或写入它指向的内存。在C中,您不必显式地强制转换到void*
。从T*
到void*
的强制转换是隐式的。到j,多少字节应该array+1
递增array
?您不必在C中显式地强制转换到void*
。从T*
到void*
的强制转换是隐式的。到J,数组+1
增量array
应包含多少字节?