task2.exe 中 0x001066F6 处未处理的异常:0xC0000005:访问冲突读取位置 0x0000000C [关闭]
Posted
技术标签:
【中文标题】task2.exe 中 0x001066F6 处未处理的异常:0xC0000005:访问冲突读取位置 0x0000000C [关闭]【英文标题】:Unhandled exception at 0x001066F6 in task2.exe: 0xC0000005: Access violation reading location 0x0000000C [closed] 【发布时间】:2014-05-20 15:43:08 【问题描述】:作为学校作业的一部分,我编写了以下代码。它根据学生 ID 对对象指针数组进行排序,这是一个介于 100 和 999 之间的私有 int。但由于某种原因,我在 VS12 中调试时 getId 函数出现以下错误:
Unhandled exception at 0x001066F6 in task2.exe:
0xC0000005: Access violation reading location 0x0000000C.
这是使用getId的代码:
if (nr_of_students > 1)
int pre = nr_of_students - 1;
int current = nr_of_students;
Student* temp;
// This pause will run:
system("pause");
while (pre > 0 && students[pre]->getId() > students[current]->getId())
// This pause will NOT run:
system("pause");
temp = students[current];
students[current] = students[pre];
students[pre] = temp;
pre--;
current--;
Student类的代码:
class Student : public Person
private:
int id;
/* Other variables */
public:
/* Constructors and functions */
int getId()
return id;
;
这到底是怎么回事?
【问题讨论】:
'这到底是怎么回事?'您很可能正在取消引用无效的 (NULL
) 指针。
也许内置调试器会有所帮助?比如可能告诉你哪一行产生了错误?
我只有在使用调试器时才会得到错误,否则它只会崩溃。调试器说错误出现在从 getId 函数返回 id 的那一行。
【参考方案1】:
根据提供的信息最可能的原因:
current
等于 nr_of_students
,并且在
while (pre > 0 && students[pre]->getId() > students[current]->getId())
current
用作数组索引。由于数组索引从zero
开始,如果nr_of_students
实际上等于数组中的元素数,这将是一个问题。例如。如果有5
元素,则最大索引可以是4
,而不是5
。如果使用5
,内存位置无效,会返回无效的Student*
,用这个无效的指针调用getId()
会导致访问冲突错误。
【讨论】:
以上是关于task2.exe 中 0x001066F6 处未处理的异常:0xC0000005:访问冲突读取位置 0x0000000C [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
无法读取 vuex 中 Store._callee 处未定义的属性“getProduct”(操作名称)
Vue 错误:TypeError:无法读取 Proxy.render 处未定义的属性“标题”
无法读取 Object.eval [as updateDirectives] 处未定义的属性“性别”
反应钩子形式 - 类型错误:无法读取 L 处未定义的属性“拆分”(get.ts:6)
UncaughtReference 错误:使用 webpack 后 HTMLInputElement.onclick 处未定义函数