1
|
LeopardSkinPillBoxHat · 技术社区 · 14 年前 |
![]() |
1
2
您的单元测试有缺陷,因为它依赖于未定义的行为。您应该重写单元测试,使其不依赖于未定义的行为,在这种情况下,无论内存管理器如何决定分配内存,单元测试都将始终通过。 你要做的是:
相反,您应该重新构造单元测试,使其工作方式如下:
|
![]() |
2
2
你可以替换
|
![]() |
3
1
首先-不是在“普通”内存管理器中。一旦释放内存,就将其所有权传递给内存管理器,后者可以重用它。 你可以 write a custom manager 作为 user Andreas Brinck 建议,但它能做什么呢?它不是从air创建内存,而是从CRT堆或操作系统堆之类的地方请求内存。 场景A。它不会将内存返回到底层堆-您将有一个漏洞,内存块仍将映射到地址空间,并且可以访问。 场景B。它会将内存返回到底层堆-然后当您的管理员再次尝试分配内存时,底层堆可以再次返回该块。另外,当您返回内存时,您不知道底层堆会做什么。它可能会使其未映射或未映射-因此访问内存可能会崩溃或未崩溃。 归根结底是你搞砸了。尝试测试未定义的行为不会很有成效。 |
![]() |
4
0
这是一个未定义行为的例子。无论是C++还是堆管理器都不知道如何分配内存。您不能依赖内存被重用或不被重用。当您执行上述操作时,无法确定或更改返回的指针是否与第一个分配的指针不同。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 6 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 6 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 6 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |