【发布时间】:2020-05-09 20:30:53
【问题描述】:
unsigned short* myClass::get_last(size_t _last) const
{
if (_last == 0) _last = last.size();
if (_last <= last.size())
{
unsigned short* temp = new unsigned short [_last] {};
while (_last > 0) temp[_last] = last[last.size() - _last--]; //I get a warning HERE
return temp;
}
throw std::runtime_error("Error!");
}
上面写着:
写入“temp”时缓冲区溢出:可写大小为“_last*2” 字节,但可能会写入“_last”字节。
这是什么意思?我确定 _last 不大于 temp.size() 因为if 所以我该怎么办?
它在运行时完美运行,但我讨厌让其他用户或我将来无法理解我的代码的警告。
编辑: _last 是用户在运行时给出的参数,因此它最终可能具有任何值,但如果他的值超出范围,则会出现异常(在另一个函数中管理)。
我在标题中提到的向量是last,它是myClass的成员。
我知道数组的元素从 0 到 _last - 1,这就是为什么我在使用它之前递减 _last第一次(你可能知道赋值关联性是从右到左的)。
我希望我回答了你所有的 cmets ;)
【问题讨论】:
-
你是如何使用这个功能的?
_last有什么价值?什么是last,它是如何初始化的?请尝试创建minimal reproducible example 向我们展示。也请花一些时间阅读how to ask good questions,以及this question checklist。 -
temp是_last元素的数组,然后您写入temp[_last]。你知道 C++ 中的数组索引从 0 开始吗?这样有效索引从 0 变为_last-1? -
问题标题承诺的向量在哪里?
-
为什么我感觉这段代码正在做一些使用标准库容器可以轻松完成的事情?
-
好的我编辑了我的帖子,希望它更容易理解