malloc,它如何分配地址?

时间:2017-08-16 21:18:55

标签: c pointers memory-management malloc

我知道malloc,分配了连续的内存块并返回分配的第一个地址,我们将它保存在一个指针中使用它。

我有以下问题:

我发现如果我分配的字节数少于必要的数量,或者尝试访问超出分配字节数的字节,程序仍然有用。

error: function(xhr, ajaxOptions, thrownError)
  {
        alert('Error in AJAX response.  Please see console log for details.');

    console.log(thrownError);
    console.log("readyState: " + xhr.readyState);
        console.log("responseText: "+ xhr.responseText);
        console.log("status: " + xhr.status);
  }

在我的想法之后,int *ptr; ptr = (int*)malloc(sizeof(int) * 2); *ptr = 1; *(ptr + 1) = 2; *(ptr + 2) = 3; 不应该工作,但它仍然有效。我认为因为*(ptr + 2) = 3;在内存中后跟*(ptr + 1)

我的问题是为什么它可以工作,如果它是这样的,为什么我们不使用malloc只分配任何东西的第一个元素?

1 个答案:

答案 0 :(得分:0)

Malloc和free函数作为内存管理器的一部分。它们可以帮助您管理内存使用,因此您的程序不会意外地重叠相同内存空间中的数据。您的程序通常可以随时访问整个可写内存空间(这取决于操作系统和语言)。 Malloc和Free可帮助您跟踪当前使用的内存。当您调用malloc时,您正在从内存管理器请求一块可用内存。它会返回一个指向该内存块开头的指针(你知道它的结束位置,因为你请求了它的大小),并向你保证,在释放该块之前,对malloc的额外调用不会返回相同的内存。由您来确保您的程序不会在您分配的内存空间之外写入,并且释放您分配的任何内存。