C 在结构中用固定数组映射可变内存块
Visual Studio不会抱怨访问超过13字节的固定数组,这是不可取的吗?我的意图是通过对具有内置头的结构使用直接内存写入来避免处理文件IO中的头。为标题道歉\ 在结构的末尾定义一个零长度数组有一个技巧。然后,您可以分配C 在结构中用固定数组映射可变内存块,c,arrays,struct,C,Arrays,Struct,Visual Studio不会抱怨访问超过13字节的固定数组,这是不可取的吗?我的意图是通过对具有内置头的结构使用直接内存写入来避免处理文件IO中的头。为标题道歉\ 在结构的末尾定义一个零长度数组有一个技巧。然后,您可以分配sizeof结构加上所需数组的大小,得到任意大小的数组,在运行时而不是编译时决定。以下是一些关于它的信息: 注意事项: 您必须分配正确的内存量。即使没有分配内存,也可以访问结构之外的内存。但这是代码中的一个bug。内存可能用于其他用途,或跨越边界等。最坏的情况是,它将覆盖其
sizeof
结构加上所需数组的大小,得到任意大小的数组,在运行时而不是编译时决定。以下是一些关于它的信息:
注意事项:
realloc
调整整个结构+数组大小,则无法调整数组大小这只适用于在堆上分配的结构,而不适用于堆栈上的自动变量。在结构的末尾定义一个零长度数组有一个技巧。然后,您可以分配
sizeof
结构加上所需数组的大小,得到任意大小的数组,在运行时而不是编译时决定。以下是一些关于它的信息:
注意事项:
realloc
调整整个结构+数组大小,则无法调整数组大小struct image_struct {
unsigned int width;
unsigned int height;
char mode;
char depth;
unsigned char data[13];
}
image_struct* newImage( unsigned int width, unsigned int height, char depth ) {
image_struct* image = (image_struct*)malloc(
sizeof(image_struct) - 13 + width * height * depth );
return( image );
}