Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在HeapAlloc更改内存地址后是否应使用HeapFree?_C_Windows_Winapi_Memory - Fatal编程技术网

在HeapAlloc更改内存地址后是否应使用HeapFree?

在HeapAlloc更改内存地址后是否应使用HeapFree?,c,windows,winapi,memory,C,Windows,Winapi,Memory,假设以下场景: 我们使用HeapAlloc()WINAPI函数将一块内存分配给varX 我们希望使用heaperalloc()重新分配X heaperalloc()调整堆的大小并移动到新位置,因此指针已更改-我们称之为Y 我们应该在旧内存地址(X)被HeapAlloc移动后对其执行HeapFree操作,还是HeapAlloc会自动为我们清除以前的内存指针?否。HeapAlloc()将已释放旧地址。实际上,无论是Windows API堆函数还是标准的C malloc()/realloc()/fre

假设以下场景:

  • 我们使用HeapAlloc()WINAPI函数将一块内存分配给varX

  • 我们希望使用heaperalloc()重新分配X

  • heaperalloc()调整堆的大小并移动到新位置,因此指针已更改-我们称之为Y

  • 我们应该在旧内存地址(X)被HeapAlloc移动后对其执行HeapFree操作,还是HeapAlloc会自动为我们清除以前的内存指针?

    否。HeapAlloc()将已释放旧地址。实际上,无论是Windows API堆函数还是标准的C malloc()/realloc()/free(),您遇到的每个分配器都会这样做。不过,这里有一个直接的引语:

    如果heaperalloc失败,则不会释放原始内存,并且原始句柄和指针仍然有效

    heaperalloc保证保留被重新分配的内存的内容,即使新内存被分配到不同的位置。保存内存内容的过程涉及可能非常耗时的内存复制操作

    如果成功的话,这些组合将导致heaperalloc()释放旧内存地址的结论。

    否。heaperalloc()将已经释放旧地址。实际上,无论是Windows API堆函数还是标准的C malloc()/realloc()/free(),您遇到的每个分配器都会这样做。不过,这里有一个直接的引语:

    如果heaperalloc失败,则不会释放原始内存,并且原始句柄和指针仍然有效

    heaperalloc保证保留被重新分配的内存的内容,即使新内存被分配到不同的位置。保存内存内容的过程涉及可能非常耗时的内存复制操作

    如果成功的话,这些组合将导致heaperalloc()释放旧内存地址的结论。

    否。heaperalloc()将已经释放旧地址。实际上,无论是Windows API堆函数还是标准的C malloc()/realloc()/free(),您遇到的每个分配器都会这样做。不过,这里有一个直接的引语:

    如果heaperalloc失败,则不会释放原始内存,并且原始句柄和指针仍然有效

    heaperalloc保证保留被重新分配的内存的内容,即使新内存被分配到不同的位置。保存内存内容的过程涉及可能非常耗时的内存复制操作

    如果成功的话,这些组合将导致heaperalloc()释放旧内存地址的结论。

    否。heaperalloc()将已经释放旧地址。实际上,无论是Windows API堆函数还是标准的C malloc()/realloc()/free(),您遇到的每个分配器都会这样做。不过,这里有一个直接的引语:

    如果heaperalloc失败,则不会释放原始内存,并且原始句柄和指针仍然有效

    heaperalloc保证保留被重新分配的内存的内容,即使新内存被分配到不同的位置。保存内存内容的过程涉及可能非常耗时的内存复制操作


    这些结合起来的结果应该是,如果成功,heaperalloc()将释放旧的内存地址。

    为了更好地衡量,在调用
    heaperalloc()
    时,不要将结果直接分配给原始变量。如果重新分配失败,旧内存仍然有效,但您将丢失指向它的指针,从而泄漏该内存。请确保始终先重新分配到临时变量,然后仅在重新分配成功时才将值分配给原始变量。为了更好地衡量,在调用
    heaperalloc()
    时,不要将结果直接分配给原始变量。如果重新分配失败,旧内存仍然有效,但您将丢失指向它的指针,从而泄漏该内存。请确保始终先重新分配到临时变量,然后仅在重新分配成功时才将值分配给原始变量。为了更好地衡量,在调用
    heaperalloc()
    时,不要将结果直接分配给原始变量。如果重新分配失败,旧内存仍然有效,但您将丢失指向它的指针,从而泄漏该内存。请确保始终先重新分配到临时变量,然后仅在重新分配成功时才将值分配给原始变量。为了更好地衡量,在调用
    heaperalloc()
    时,不要将结果直接分配给原始变量。如果重新分配失败,旧内存仍然有效,但您将丢失指向它的指针,从而泄漏该内存。确保始终首先重新分配到临时变量,然后仅在重新分配成功时才将值分配给原始变量。