从std :: align释放指针

时间:2017-03-18 17:37:15

标签: c++ c++11

关于std::align

  

void* align(size_t alignment, size_t size, void*& ptr, size_t& space)

     

给缓冲区指针ptr [...]返回由指定对齐[...]对齐的指针。该函数修改指针[...]

如果align成功,则返回的指针与ptr相同。

This SO answer显示传递偏移地址,该地址为指向align的指针留出空间,将原始指针存储到超大块,最后在原始指针上调用delete 。这是必要的,还是只是这样做是安全的:

size_t space = 64;
void* ptr = malloc(space);
void* ret = std::align(alignment, targetSize, ptr, space);
if (ret == nullptr) { /* failed to align */ }
free(ptr);

1 个答案:

答案 0 :(得分:1)

如果原始指针未对齐,则viewDidLoad无法确定添加free()的结果的偏移量。很可能内存分配算法需要存储一些元信息,而这些元信息通常无法恢复。

您需要释放原始指针。我非常确定在调用std::align()时传递的指针不同于最初从malloc()获得的指针,并且会产生未定义的行为(同样适用于其他内存管理工具)。