返回信息流晚上写list的时候突然想到的...
如果我 new T[0]; 会发生甚么
稍微测试了一下发现不会 panic 或者 segfault,但是也不是空指针了
```cpp
size_t *z_u64 = nullptr;
// z_u64 == 0x0
z_u64 = new size_t[0];
// z_u64 == somewhere on heap
```
这是一条镜像帖。来源:北邮人论坛 / cpp / #101204同步于 2021/9/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
new 了但是没有完全 new
ClSlaid
2021/9/14镜像同步26 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
是有地址,valgrind 写入的时候报错(但是也可能是逆向源码静态分析出来的错误)
但是 c++ 堆上数组越界不会报 segfault 么
【 在 RinChanNOW 的大作中提到: 】
: 我猜有地址但是没空间
: --
: ............
@Name1e5s 曾经研究过这个问题:https://blog.name1e5s.com/ckdlp3ayp001fzo3u68ozgrl0/
上述文章研究的是glibc的malloc,关于MSVC对此的处理,可以参考https://docs.microsoft.com/zh-cn/cpp/c-runtime-library/reference/malloc
--------
尴尬了,原来楼主说的是new,不是malloc,上面的当我没说
--------
C++标准对此的说法应该是https://eel.is/c++draft/expr.new#9.sentence-4
--------
19L给出了GCC的libstdc++中的实现,这里给出MSVC中的实现(Clang的libc++的实现和GCC的大同小异,可以参见https://github.com/llvm/llvm-project/blob/main/libcxx/src/new.cpp)
(以下代码出自C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\crt\src\vcruntime\new_scalar.cpp,路径中的版本号可能因具体环境而不同)_CRT_SECURITYCRITICAL_ATTRIBUTE
void* __CRTDECL operator new(size_t const size)
{
for (;;)
{
if (void* const block = malloc(size))
{
return block;
}
if (_callnewh(size) == 0)
{
if (size == SIZE_MAX)
{
__scrt_throw_std_bad_array_new_length();
}
else
{
__scrt_throw_std_bad_alloc();
}
}
// The new handler was successful; try to allocate again...
}
}
一方面声明数组不能长度为0,一方面 new T[0] 也会给你兜着...这就是C++么...
【 在 plazum 的大作中提到: 】
: @Name1e5s 曾经研究过这个问题:https://blog.name1e5s.com/ckdlp3ayp001fzo3u68ozgrl0/
: 上述文章研究的是glibc的malloc,关于MSVC对此的处理,可以参考https://docs.microsoft.com/zh-cn/cpp/c-runtime-library/reference/malloc
: ............
an array with no elements该怎么理解?
【 在 plazum (plazum) 的大作中提到: 】
: @Name1e5s 曾经研究过这个问题:https://blog.name1e5s.com/ckdlp3ayp001fzo3u68ozgrl0/
: 上述文章研究的是glibc的malloc[/url...
: --------
: ...................
因为new数组的大小是动态的,所以有可能出现0,但是声明数组的大小是常量表达式,所以你完全可以在编码的时候确保不为0,我是这么理解的
【 在 ClSlaid (IWhisper#73) 的大作中提到: 】
: 一方面声明数组不能长度为0,一方面 new T[0] 也会给你兜着...这就是C++么...
应该就是字面意思吧,拥有0个元素的数组
【 在 wj364952553 (小王) 的大作中提到: 】
: an array with no elements该怎么理解?