gpt4 book ai didi

c++ - 未处理的异常...访问冲突写入位置

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:59 27 4
gpt4 key购买 nike

我是 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;
}
}

注意我已经初始化了sum每次新的 j 都为 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() 返回一个值.

关于c++ - 未处理的异常...访问冲突写入位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13783068/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com