【发布时间】:2020-08-07 10:06:14
【问题描述】:
对于我的一个 c++ 编程类,我们需要设计一个布尔数组类——包括长度和布尔数组以及内存分配, 我收到错误消息 - 线程 0x4c0c 已退出,代码为 0 (0x0)。 抛出异常:读取访问冲突。 这是 nullptr。
当我尝试使用 changeLength 方法创建新数组时出现:
BOOL 数组 H 文件
#ifndef BOOL_ARRAY_H
#define BOOL_ARRAY_H
class boolArray
{
public:
boolArray() { array = { NULL }; length = 0; }
boolArray(int len);//setting new array according users input
void intialize(int len);//setting new array according users input
void changeLength(int len);//create new array with new length
private:
bool validIndex(int index);//check if the number is in the relevant range
bool* array;
int length;
};
#endif
布尔数组 CPP 文件
boolArray::boolArray(int len)
{//ctor with parameter
if (validIndex(len))//checking if the length is a valid number
intialize(len);//set the new array
}
void boolArray::intialize(int len)
{//setting new array according users input
length = len;//initialize length from user
array = new bool[length];//memory allocation
if (!array)//check if memory allocation succeeded
{
cout << "memory allocation failed!" << endl;//show message
return;//go back
}
for (int i = 0; i < length; i++)
array[i] = 0;//set all cells false
}
void boolArray::changeLength(int len)
{//create new array with new length
if (length!=0)//if array exists //ERROR HERE
delete[] array;//free memory
intialize(len);//set new array
}
bool boolArray::validIndex(int index)
{//check if the number is in the relevant range
if (index >= 0 && index <= length)
return true;//if it is returns true
else//if not in the range
cout << "please enter a valid number!" << endl;//message
return false;//return false
}
主要使用布尔数组类---
boolArray* array;
int len;//new array length
cout << "enter size of array " << endl;
cin >> len;
array->changeLength(len);
【问题讨论】:
-
当您使用调试器运行程序时,您看到了什么?这就是调试器的用途。如果您不知道如何使用调试器,这是一个学习如何使用调试器一次运行一行的好机会,监控所有变量及其值的变化,并分析程序的逻辑执行流程。知道如何使用调试器是每个 C++ 开发人员必备的技能,没有例外。在调试器的帮助下,您应该能够快速找到此程序以及您编写的所有未来程序中的所有错误,而无需向任何人寻求帮助。
-
注意我已经添加了调试器的图像@SamVarshavchik
-
Sam 知道调试器长什么样。您需要对调试器执行的操作是单步执行代码,同时密切关注您正在使用的变量。在这种情况下,您需要回答“为什么是
thisNULL?”这个问题。要做到这一点,你需要通过程序找到this变成NULL的位置,然后从你观察到的到达那里找出它是如何发生的。有时这需要重新启动调试器并更加注意程序早期发生的事情。该错误通常与程序崩溃的地方相去甚远。 -
你可以对它更温柔,我不知道@987654330是什么@就是你我发布了它@user4581301
-
this是所有非static成员函数都有的实例变量。当您在对象上调用成员函数时,该对象在函数内显示为this。this的详细讨论将在任何非欺诈性 C++ 编程文本的早期出现。
标签: c++ arrays error-handling access-violation