malloc触摸未分配的内存

时间:2017-01-08 20:03:03

标签: c arrays memory-management malloc dynamic-allocation

我想知道为什么我的分配工作正常。我创建ptr是一个指针,而ptr2指针位于与ptr相同的位置。

这是我的代码:

int* ptr = malloc(sizeof(int));
int* ptr2 = ptr;
*ptr2 = 1;
ptr2 = ptr+1;
*ptr2 = 2;

最后,我有一个两个整数的数组:

ptr[0] = 1
ptr[1] = 2

我的问题是:为什么我可以在没有错误或警告的情况下影响值2到ptr2?我只是malloc() - 我的数组中的一个整数位置,不是吗?

1 个答案:

答案 0 :(得分:4)

这里的问题是,说

for (unsigned long long totalSize = 1MB; totalSize <= 1000MB ; totalSize += 1MB)
{
    // create
    CComPtr<ID3D11Buffer> pd3dBuffer;
    D3D11_BUFFER_DESC bufferDesc;
    {
       ZeroMemory(&bufferDesc, sizeof(bufferDesc));
       bufferDesc.ByteWidth = static_cast<UINT>(bufferSize);
       bufferDesc.Usage = D3D11_USAGE_DYNAMIC;
       bufferDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
       bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
       bufferDesc.MiscFlags = 0;
       bufferDesc.StructureByteStride = 0;
    }
    HRESULT hr = pd3dDevice->CreateBuffer(&bufferDesc, NULL, pd3dBuffer);
    if (FAILED(hr)) break;

    //release
    pd3dBuffer.Release();
    pd3dDeviceContext->ClearState();
    pd3dDeviceContext->Flush();

}

你指的是出界的记忆。接下来,在您退出时,您会调用undefined behavior。现在,无论如何,UB的结果都是不合理的。

C中没有任何内在的东西阻止你访问出界(或无效)内存,但这样做的结果是UB。

那就是说,只是一个建议,你应该在使用该指针之前检查 ptr2 = ptr+1; 的返回值,以便在malloc()失败的情况下通过解除引用NULL指针来避免UB。 / p>