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