我正在编写一个程序,打印用户输入的数字的完整英文名称 . 它不是一个完整的程序,但我不断收到错误:
编程挑战14.1.exe中0x00b02c76的第一次机会异常:0xC0000005:访问冲突读取位置0xcccccd80 . 编程挑战14.1.exe中0x00b02c76处的未处理异常:0xC0000005:访问冲突读取位置0xcccccd80 .
我试过环顾四周,找不到任何有用的东西给我 . 这个程序:
头文件:
#ifndef NUMBERS_H
#define NUMBERS_H
#include <string>
using namespace std;
const int SIZE1 = 18;
const int SIZE2 = 8;
class Numbers
{
private:
int number;
string hundred;
string thousand;
string * one;
string * ten;
public:
Numbers(int num)
{
number = num;
hundred = "hundred";
thousand = "thousand";
string * one = new string[SIZE1];
string * ten = new string[SIZE2];
}
void initializeArray()
{
// Intialize array "one"
one[0] = "zero";
one[1] = "one";
one[2] = "two";
one[3] = "three";
one[4] = "four";
one[5] = "five";
one[6] = "six";
one[7] = "seven";
one[8] = "eight";
one[9] = "nine";
one[10] = "eleven";
one[11] = "twelve";
one[12] = "thirteen";
one[13] = "fourteen";
one[14] = "fifteen";
one[15] = "sixteen";
one[16] = "seventeen";
one[17] = "eighteen";
one[18] = "nineteen";
// Initialize the ten array
ten[0] = "ten";
ten[1] = "twenty";
ten[2] = "thirty";
ten[3] = "forty";
ten[4] = "fifty";
ten[5] = "sixty";
ten[6] = "seventy";
ten[7] = "eighty";
ten[8] = "ninety";
}
string determine()
{
string name = "";
for (int i = 0; i <= number; i++)
{
if (number == i)
{
name = one[i];
}
}
return name;
}
~Numbers()
{
delete [] one;
delete [] ten;
}
};
#endif
这是主程序,我只是使用构造函数为数字赋值,使调试更快一些
#include <iostream>
#include "Numbers.h"
using namespace std;
int main()
{
Numbers n(5);
string name = n.determine();
cout << "The number is " << name << endl;
cin.ignore();
cin.get();
return 0;
}
顺便说一句,这是编译器的vc
我没有回答任何问题,因为这不是太有组织
4 回答
这里有两件事:
你根本不是在调用“initializeArray()” . 因此,当您尝试访问阵列时,那里什么都没有 . 我建议在构造函数中调用它 . 像这样:
第二,是上面的人说的 . 您的数组大小的值不正确,因为您尝试将19个值分配给大小为18的数组 . 只是要确保让大小超出我们的预期,您可以稍后调整:
另外,看看你的确定()?而不是使用for循环你为什么不去:
编辑:哇有另外一件事我错过了...你已经宣布你的数组指针变量两次,所以它实际上超出范围认为你想要制作一些本地版本 . 再看看上面构造函数的调整后的实现 . 看看我如何从变量名称之前删除“String *” .
one
拥有18个元素,但你在其中放置了19个元素 .SIZE1
数组的有效数组索引是0到17.通常,大小为 N 的数组的有效索引是 0 到 N-1 .我建议使用
std::vector<std::string>
.变量“one”和“ten”已从字符串指针更改为包含字符串的向量 . 在构造函数中调用initializeArray . 更改了为新字符串分配名称字符串的方式 . 这是工作代码 .