草庐IT

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

coder 2024-02-19 原文

我是 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/

有关c++ - 未处理的异常...访问冲突写入位置的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  3. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  4. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  5. Ruby 写入和读取对象到文件 - 2

    好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信

  6. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  7. ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常 - 2

    我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd

  8. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  9. ruby - 在 Ruby 中重新分配常量时抛出异常? - 2

    我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案

  10. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

随机推荐