- 主题:c++果然是门邪恶的语言!!
--
FROM 183.195.5.*
理解数组只是地址偏移就行,a[1] 写成 1[a]都可以的
【 在 stub 的大作中提到: 】
: [upload=1][/upload][upload=2][/upload]
--
FROM 111.197.239.143
【 在 jjfz 的大作中提到: 】
: 理解数组只是地址偏移就行,a[1] 写成 1[a]都可以的
:
这个我倒是知道。只是报这个错,哎。。,并不是在赋值的时候报错,而是在析构的时候报错。且类似问题,报错不同
--
FROM 183.195.5.*
上面是栈析构报错,下面是堆对象析构报错
--
FROM 120.245.0.*
你用tcmalloc,说不定就是赋值时crash了
默认allocator分配内存时,预留前面8字节记录大小信息
-1正好写到这个数据,析构时数据不对,自然崩掉
【 在 stub 的大作中提到: 】
: 这个我倒是知道。只是报这个错,哎。。,并不是在赋值的时候报错,而是在析构的时候报错。且类似问题,报错不同
--
FROM 111.197.239.143
【 在 jjfz 的大作中提到: 】
: 你用tcmalloc,说不定就是赋值时crash了
: 默认allocator分配内存时,预留前面8字节记录大小信息
: -1正好写到这个数据,析构时数据不对,自然崩掉
: ...................
没有emplace_back那一行,赋值时就会崩掉
--
FROM 183.195.5.*
废话,默认初始化vector三个内部指针都是nullptr
你对nullptr做-1操作,不崩才怪
【 在 stub 的大作中提到: 】
: 没有emplace_back那一行,赋值时就会崩掉
--
FROM 111.197.239.143
邪恶的是人吧
正常谁会写个负的下标。虽然能编译过去。
--
FROM 222.129.205.*
【 在 z16166 的大作中提到: 】
: 邪恶的是人吧
: 正常谁会写个负的下标。虽然能编译过去。
不一定是写的啊, 可能是计算出来的. 今天写堆排序, 忘记 size()返回的是uint64, 当成int 来使用 然后
((size_type)0 - 1) / 2 当成0了, 其实是-1, 就这样对-1下标取值了.
--
FROM 183.195.5.*
那还是人的问题,哈哈
你可以把关键数组/类的operator[]重载一下,加上越界判断。而那些不会越界的地方,不需要为此付出开销。另外,下标别算错
如果人把指针算成了null或者超大数导致进程被杀,是不是也要怪OS邪恶啊
【 在 stub 的大作中提到: 】
: 不一定是写的啊, 可能是计算出来的. 今天写堆排序, 忘记 size()返回的是uint64, 当成int 来使用 然后
: ((size_type)0 - 1) / 2 当成0了, 其实是-1, 就这样对-1下标取值了.
--
修改:z16166 FROM 222.129.205.*
FROM 222.129.205.*