提问人:Neteroh 提问时间:7/8/2020 最后编辑:brunoNeteroh 更新时间:7/8/2020 访问量:1206
数组新长度错误错误未处理异常
Bad array new length error unhandled exception
问:
我不确定我哪里出了问题。
我有一个 Movie.h,其中包含所需的所有数据成员和构造函数、析构函数和复制构造函数,但我有一种感觉,它在我的赋值运算符上失败了,有人,请帮忙
Movie& Movie::operator=(const Movie& _assign) {
// Self-assignment check
if (this == &_assign)
return *this;
// Shallow copy non-dynamic data members
mRuntime = _assign.mRuntime;
// Deep copy appropriate data members
mTitle = new char[strlen(_assign.mTitle) + 1];
strcpy_s(mTitle, strlen(_assign.mTitle) + 1, _assign.mTitle);
// Deep copy the reviews
SetStars(_assign.mStars, mNumReviews);
return *this;
}
void Movie::SetStars(const int* _stars, int _numReviews) {
// Allocate array and deep copy
mStars = new int[_numReviews];
for (int i = 0; i <= _numReviews; ++i) {
// Cap reviews between 1-10
if (_stars[i] > 10)
{
mStars[i] = 10;
}
else if (_stars[i] < 0)
{
mStars[i] = 0;
}
else
{
mStars[i] = _stars[i];
}
}
// Set the number of reviews
mNumReviews = _numReviews;
}
答:
3赞
bhristov
7/8/2020
#1
问题发生在这里:
mStars = new int[_numReviews];
for (int i = 0; i <= _numReviews; ++i) {
具体来说:
i <= _numReview // this causes you to go out of bounds
将其更改为:
i < _numReview
解决了问题
您正在分配项目。C++ 具有从 0 开始的数组索引。元素将从_numReview
0
_numReview - 1
请考虑使用 和 代替 c 样式数组。std::string
std::vector
评论
0赞
bhristov
7/8/2020
@Neteroh,如果使用 std::string 而不是 char 数组会更好。我怀疑这条线导致了问题:现在。strcpy_s(mTitle, strlen(_assign.mTitle) + 1, _assign.mTitle);
0赞
Neteroh
7/8/2020
我不能,这是为了一个我不允许改变的作业,相信我,我宁愿使用字符串而不是数组
1赞
user4581301
7/8/2020
@Neteroh 在开发环境附带的调试器中运行程序。一个像样的调试器会在程序崩溃后立即停止,并允许您检查崩溃现场和导致崩溃的回溯。这将为您提供缩小原因范围所需的信息,如果不能彻底解决它。
评论
char*
std::string
mTitle
mStars
cout
cout