c++ - c++ 我得到这个错误 bad_array_new_length
问题描述
所以我创建了一个程序来模拟掷骰子,然后打印结果(家庭作业:))。现在我得到了一个 bad_array_new 长度并认为我知道它发生在哪里,但我真的不明白为什么。这可能是一个逻辑错误,如果有人能找到它或给我一个指针,那就太棒了。
int* CalculateThrows(int dice_one, int dice_two, int throw_count)
{
// I think the error occurs here
int *digits = new int[(dice_one * dice_two) + 1]{ 0 };
digits[0] = dice_one * dice_two+1;
if (throw_count > 0)
{
for (int i = 1; i < throw_count; i++)
digits[GetRandomValue(dice_one) + GetRandomValue(dice_two)]++;
}
return digits;
}
这就是我调用方法并稍后遍历数组的方式:
int main(int argc, char* argv[])
{
int * values = CalculateThrows((int)argv[1], (int)argv[2], (int)argv[3]);
for (int i = 1; i < values[0]; i++)
{
cout << i << ". Has been thrown: " << values[i];
}
}
解决方案
argv[1]
是指向包含第一个命令行参数的字符串的指针。所以如果你调用你的程序./program 6 5 4
,argv[1]
将是字符串"6"
,而不是数字6
。您应该使用atoi(argv[1])
来获取号码。
在使用之前,您还应该检查是否argc
至少是.4
argv[3]
std::vector<int> CalculateThrows(int dice_one, int dice_two, int throw_count)
{
std::vector<int> digits (dice_one * dice_two, 0);
if (throw_count > 0)
{
for (int i = 0; i < throw_count; i++)
digits[GetRandomValue(dice_one) + GetRandomValue(dice_two)]++;
}
return digits;
}
int main(int argc, char* argv[])
{
if (argc < 4) return -1;
std::vector<int> values = CalculateThrows(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]));
for (size_t i = 0; i < values.size(); i++)
{
cout << i << ". Has been thrown: " << values[i];
}
}
推荐阅读
- c# - C#如何在WinFormApp之外测量鼠标按钮向下和向上之间的时间
- javascript - 不使用 Webpack 编译的私有字段
- jira - 通知不出去
- powershell - 如何在 24 小时内根据特定文件名下载 Outlook 附件?
- c++ - 未找到以前的 IPDB,回退到完整编译
- windows - 在 Anaconda Powershell 中仅获取 IP 地址
- r - R 程序星中曲线数据的空间操作
- python - 搜索子元素时,Python Selenium 不在父元素内
- c# - 当 C# 写入重定向到文件的标准输出时,智能引号转换为直引号
- api - 这些 URI 被视为一个端点还是 3 个端点?