未处理的异常..访问冲突写入位置
Unhandled exception... Access violation writing location
我是C++新手,我正在尝试编写一个使用双指针将两个数组相乘的程序。到目前为止,我的代码是:
#include <iostream>
using namespace std;
//multiplies two matrices A(mxl) and B(lxn) to produce C(mxn)
int m,l,n;
int **A, **B, **C;
void main(void)
{
。用户输入 M,L,N 并像这样分配内存。
int i, j;
//creates a new mxl array
A= (int**) new int*[m];
for(i=0;i<m;i++)
{
A[i]=new int[l];
}
//creates a lxn array
B = (int**) new int*[l];
for(i=0;i<l;i++)
{
B[i]=new int[n];
}
//creates a mxn array
C = (int**) new int*[m];
for(i=0;i<n;i++)
{
C[i]=new int[n];
}
int sum = 0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
for(int k=0;k<l;k++)
{
sum =+ A[i][k]*B[k][j];
}
}
//cout<sum<<"t";
到目前为止,一切正常。如果我将其更改为仅 cout 'sum',那么它会以正确的顺序返回数组的所有正确元素;当我尝试将此值放入数组时,它会返回错误消息。
C[i][j]=sum;
}
}
我确信有一种更好的方法来将矩阵相乘,但我更感兴趣的是知道为什么这段特定的代码不起作用;它看起来非常简单,我看不出错误来自哪里。
在更新中,您添加了以下代码:
C = (int**) new int*[m];
for(i=0;i<n;i++)
{
C[i]=new int[n];
}
循环条件不正确。而不是i<n
你需要i<m
.
您的乘法循环如下所示:
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
for(int k=0;k<l;k++)
{
sum =+ A[i][k]*B[k][j];
}
}
C[i][j]=sum;
}
分配C[i][j]
位于错误的块中 - [j]
数组访问超出界。
它应该是这样的:
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
sum = 0;
for(int k=0;k<l;k++)
{
sum =+ A[i][k]*B[k][j];
}
C[i][j]=sum;
}
}
请注意,每次启动新的j
循环时,我都会将sum
初始化为 0。这将更正代码中的另一个错误。
如果您声明具有尽可能小范围的变量,那就更好了。喜欢这个:
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
int sum = 0;
for(int k=0;k<l;k++)
{
sum =+ A[i][k]*B[k][j];
}
C[i][j]=sum;
}
}
如果您这样做,编译器将拒绝您最初将赋值放置给C[i][j]
。
您的main
函数应按如下方式声明:
int main()
并且您应该从main()
中返回一个值。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- 0xC0000005:读取位置0xCDCDCDC1时发生访问冲突
- 0xC0000005:读取位置0xCDCDCDCD时发生访问冲突
- 读取类的析构函数中的位置时发生访问冲突
- 在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误
- 创建 2D 数组0xCCCCCCCC访问冲突写入位置
- 0x0F50DF58:0xC0000005:访问冲突读取位置0x0047CA04时未处理的异常
- 在 DLL 中嵌入 Python:Py_DECREF列表对象时访问冲突读取位置
- 在 C 代码中调用 Python 函数时第三次出现访问冲突写入位置错误
- 0xC0000005:访问冲突读取位置0x0000000000000008
- 使用动态数组访问冲突写入位置
- C++访问冲突读取位置0xDDDDDDCD当我尝试删除已更新的数组时
- 使用向量的函数崩溃,调试器说访问冲突读取位置
- vc++ 访问冲突读取位置
- C++ - 智能指针 - 访问冲突读取位置0xDDDDDDDD
- C++访问冲突读取位置错误
- 调用隔离后访问冲突执行位置0x0000000000000000:New()