C语言 malloc() 如何知道你想将它提供的内存块用作数组?



如果malloc()返回指向单个内存块的指针,如何使用它连续存储多个值并允许使用下标运算符访问每个值,充当指向数组的指针?

如果我尝试通过下标其地址来更改整数的"第二个元素",则会导致未定义的行为。由于malloc()返回指向单个内存块的指针,因此它返回的指针不应该引用整个块,因此下标它应该访问内存中它旁边的垃圾值吗?

此外,分配的内存还可用于存储单个值,但不得超过指针强制转换为的类型的大小,而不是分配给的内存块的大小。

这一切是否与指针返回后强制转换为的类型有关?有人可以指出我正确的方向吗?

我想你的误解就在这里:

由于 malloc(( 返回指向单个内存块的指针,它

返回的指针不应该引用整个块,因此下标它应该访问内存中它旁边的垃圾值吗?

事实上,如果您执行p = malloc(n)并且p具有"指向某种大小n类型的指针"的类型,那么p[1]是越界数组访问。但是,通常当您p = malloc(n)分配数组时,p的类型不是指向数组(大小为n(的指针,而是指向数组第一个元素的指针。也就是说,而不是

char (*p)[500] = malloc(500);

是吗:

char *p = malloc(500);

在这种情况下,p[1]是完全有效的。请注意,对于第一个不寻常的表单,您仍然可以执行(*p)[1]p[0][1]并使其有效。

但要小心,如果您多次使用 malloc,它将返回在堆的不同部分分配的内存。因此,您无法从一个阵列移动到另一个阵列。

相关内容

  • 没有找到相关文章

最新更新