【发布时间】:2016-05-07 04:49:37
【问题描述】:
所以我有一个小问题需要回答:
如果函数是,c+9指向内存中的哪个段:
void f()
{
int *c=(int*)malloc(10);
}
我想我知道 malloc 是如何工作的,并且我查看了其他问题,所以这应该分配 10 个字节的内存并返回第一个字节的地址,再加上它将它转换为 int。
所以因为sizeof(int)是4个字节,所以我认为9个整数不会有足够的空间,c+9会指向分配内存范围之外的一些内存,它会返回错误,但是不,程序运行得很好,好像分配了10*sizeof(int)。那么我在哪里做错了?
【问题讨论】:
-
c + 9与&c[9]相同,但假设c实际上是指向至少10 个元素的数组的指针。您的代码中不是这种情况。 -
我知道,但是这里的代码在我使用时可以正常工作,我不是在制作程序,这是一个问题。例如,当我制作程序时,我使用 malloc( 10 * sizeof (int) )。但这是一个测试我对 C 工作原理的了解的问题。
-
当您使用超出范围的内存时,您有未定义的行为。在大多数情况下,您不会收到任何编译时错误。它也不必抛出异常。此外,如果您不需要,编译器可能会优化内存访问。
标签: c memory-management casting malloc sizeof