【发布时间】:2021-06-04 15:43:25
【问题描述】:
我有一个 C 程序,它应该使用 for 循环将数组中的每个元素初始化为零。但是,在第一遍时,我不断收到此错误:Homework6.exe 中在 0x00D25538 处引发的异常:0xC0000005:访问冲突写入位置 0x036FE514。我已经使用调试器逐步完成了代码,并且没有看到任何明显的问题(同样,作为初学者,我不确定我知道要寻找什么)。我的代码是否有问题可能导致该问题?
这是我的代码:
long InitializeArray(long lngMyArray)
{
for (int intIndex = 0; intIndex < lngARRAY_SIZE; intIndex += 1)
{
lngMyArray[&intIndex] = 0; // THIS LINE THROWS THE ERROR
}
return lngMyArray;
}
感谢您的帮助,我真的很感激!
【问题讨论】:
-
long不是数组类型。这不是数组访问。使用索引的地址来访问不是数组的东西更加奇怪,而且离您的目标更远。你的意思是long*? C 允许编译一些非常愚蠢的东西,例如2[i]与i[2]相同。 -
这个函数,为了遵守常见的 C 约定,应该看起来像
void InitializeArray(long* array, size_t size),你传递 both 数组及其相关的大小。将lngARRAY_SIZE作为一个全局变量只是混乱且容易出错。提醒一下,所有这些代码实际上归结为对bzero()或memset()的调用,因此它甚至不需要存在。