【问题标题】:Exception thrown, access violation writing location抛出异常,访问冲突写入位置
【发布时间】: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() 的调用,因此它甚至不需要存在。

标签: c exception


【解决方案1】:

我解决了这个问题。这是解决方案:

long InitializeArray(long *lngMyArray) 
{
    for (int intIndex = 0; intIndex < lngARRAY_SIZE; intIndex += 1)
    {
        lngMyArray[intIndex] = 0;
    }

    return lngMyArray;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多