jjzjj

go - panic : runtime error: makeslice: cap out of range

coder 2024-07-09 原文

作为每天练习围棋的练习,我每天都在 r/dailyprogrammer 上尝试一项日常挑战。

目前,我正在实现中级挑战 #362 ( https://www.reddit.com/r/dailyprogrammer/comments/8n8tog/20180530_challenge_362_intermediate_route/ ),这是一个简单的加密/解密挑战。

所以在我的方法中,我有一个基本结构来表示输入:

type Vector struct {
    x, y int
}

type Input struct {
    text   string
    vector Vector
    method string
}

以及挑战输入的一部分结构:

inputs := []Input{
        {"WE ARE DISCOVERED. FLEE AT ONCE", Vector{9, 3}, "clockwise"},
        {"why is this professor so boring omg", Vector{6, 5}, "counter-clockwise"},
        {"Solving challenges on r/dailyprogrammer is so much fun!!", Vector{8, 6}, "counter-clockwise"},
        {"For lunch let's have peanut-butter and bologna sandwiches", Vector{4, 12}, "clockwise"},
        {"I've even witnessed a grown man satisfy a camel", Vector{9, 5}, "clockwise"},
        {"Why does it say paper jam when there is no paper jam?", Vector{3, 14}, "counter-clockwise"},
    }

到目前为止,还不错。

我有一个函数来简化挑战中概述的输入字符串(即一个函数删除所有标点符号并用“X”填充字符串以达到所需网格的长度)。

之后,我将字符串输入此函数,以创建矩阵网格:

func makeGrid(s string, v Vector) [][]byte {
    g := make([][]byte, v.y, v.x)
    for k, c := range s {
        g[k/v.x] = append(g[k/v.x], byte(c))
    }
    return g
}

因此对于第一个输入,例如,运行程序将产生如下网格(为了便于阅读,下面包含字符串而不是字节):

[[W E A R E D I S C]
 [O V E R E D F L E]
 [E A T O N C E X X]]

但是,当程序到达这个输入时:

{"For lunch let's have peanut-butter and bologna sandwiches", Vector{4, 12}, "clockwise"},

抛出以下错误:

panic: runtime error: makeslice: cap out of range

此输入相同:

{"Why does it say paper jam when there is no paper jam?", Vector{3, 14}, "counter-clockwise"},

我完全明白为什么错误发生在运行时而不是编译时,因为编译器无法在编译期间知道网格的大小,所以 panic 只能发生在运行时。

我不明白的是我反转了输入中的向量:

{"For lunch let's have peanut-butter and bologna sandwiches", Vector{12, 4}, "clockwise"},
{"Why does it say paper jam when there is no paper jam?", Vector{14, 3}, "counter-clockwise"},

错误不再发生。程序运行良好。

它只发生在向量中的 x 值小于 y 值的情况下。

调试并跟踪代码,我不太明白为什么有很多短行的网格会抛出错误,而长行很少的网格不会。

这里似乎还有其他一些可能相关的答案,但我看不出应该如何修改我的方法以避免错误。

有什么想法吗?

最佳答案

根据 Tim Cooper 的回复,这是一个简单的修复。

只是更改了 make 语句以正确使用它:

func makeGrid(s string, v Vector) [][]byte {
    g := make([][]byte, v.y)
    for k, c := range s {
        g[k/v.x] = append(g[k/v.x], byte(c))
    }
    return g 
}

现在工作正常。

关于go - panic : runtime error: makeslice: cap out of range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50789279/

有关go - panic : runtime error: makeslice: cap out of range的更多相关文章

  1. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  2. ruby-on-rails - Textmate 'Go to symbol' 相当于 Vim - 2

    在Railcasts上,我注意到一个非常有趣的功能“转到符号”窗口。它像Command-T一样工作,但显示当前文件中可用的类和方法。如何在vim中获取它? 最佳答案 尝试:helptags有各种程序和脚本可以生成标记文件。此外,标记文件格式非常简单,因此很容易将sed(1)或类似的脚本组合在一起,无论您使用何种语言,它们都可以生成标记文件。轻松获取标记文件(除了下载生成器之外)的关键在于格式化样式而不是实际解析语法。 关于ruby-on-rails-Textmate'Gotosymbol

  3. 【RuntimeError: CUDA error: device-side assert triggered】问题与解决 - 2

    RuntimeError:CUDAerror:device-sideasserttriggered问题描述解决思路发现问题:总结问题描述当我在调试模型的时候,出现了如下的问题/opt/conda/conda-bld/pytorch_1656352465323/work/aten/src/ATen/native/cuda/IndexKernel.cu:91:operator():block:[5,0,0],thread:[63,0,0]Assertion`index>=-sizes[i]&&index通过提示信息可以知道是个数组越界的问题。但是如图一中第二行话所说这个问题可能并不出在提示的代码段

  4. ruby - 通过 gem install mechanize 安装 gems 时显示错误 "invalid switch in RUBYOPT: -F (RuntimeError)" - 2

    我尝试通过以下命令在我的计算机上安装gem(Mechanize):>>geminstallmechanize--platform=ruby>>geminstallmechanize错误ERROR:Errorinstallingmechanize:ERROR:Failedtobuildgemnativeextension."C:/ProgramFiles/Ruby200-x64/bin/ruby.exe"extconf.rbC:/ProgramFiles/Ruby200-x64/bin/ruby.exe:invalidswitchinRUBYOPT:-F(RuntimeError)在我尝

  5. ruby-on-rails - 用于 Ruby 的 vim 中的全局 "Go to definition"? - 2

    自97年以来我一直在使用vi/vim进行各种快速编辑和管理任务,但最近才考虑使用它来替换Netbeans作为我选择的ruby​​编辑器。我发现一件事在Netbeans和Eclipse中非常有用的是Ctrl+Click“转到定义”功能,您可以在其中按住Ctrl键并单击一个类或方法,然后它将带您了解定义。现在,我玩过丰富的ctags和rails.vim,而且很接近,但没有雪茄。这就是我想要的:默认情况下在Netbeans和Eclipse中,您可以在本地rails中按住ctrl并单击本地方法或类项目,但你也可以ctrl+click定义在gems或用Ruby编写的系统库。以Netbeans为例

  6. ruby-on-rails - RunTimeError:Rspec 2.10.1 中的 ActionController::RackDelegation for rails 3.1.4 应用程序 Controller - 2

    在我们的rails3.1.4应用程序中,rspec用于测试应用程序Controller中的公共(public)方法require_signin。这是require_signin方法:defrequire_signinif!signed_in?flash.now.alert="Loginfirst!"redirect_tosignin_pathendend这是rspec代码:it"shouldinvokerequire_signinforthosewithoutlogin"docontroller.send(:require_signin)controller{shouldredirec

  7. ruby-on-rails - rails : wkhtmltopdf RuntimeError (Location of wkhtmltopdf unknown) - 2

    我正在使用Ubuntu11.04在RubyonRails中开发一个应用程序。在应用程序中,我需要生成pdf文档。所以我正在使用wicked_pdf和wkhtmltopdf二进制gem。在我系统的开发环境中,一切正常。但是一旦我使用Phusion在CentOS5.6上部署应用程序乘客,当我尝试动态生成pdf时,出现以下错误:RuntimeError(wkhtmltopdf位置未知)我正在使用Ruby1.9.2.p136rails3.1.1任何帮助将不胜感激......谢谢。 最佳答案 另一种方法是通过Gemfile安装二进制文件。只需

  8. ruby - Rails 5 升级:在 ActionDispatch::ParamsParser (RuntimeError) 之后没有要插入的中间件 - 2

    我正在将开发中的应用程序从Rails4.2升级到Rails5beta1.1。应用程序在升级前运行良好。我已经完成了基本的升级步骤(更新Ruby、更新Rails和相关步骤:http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html)。Gemfile也已更新为最新的Gems。当我运行$railsmiddleware或$railsconsole或$railsserver时,出现以下错误:Nosuchmiddlewaretoinsertafter:ActionDispatch::ParamsParser.../.rvm/gems

  9. ruby - bundle exec rspec spec/=> RUBYOPT : -F (RuntimeError) 中的无效开关 - 2

    当我在Windows764位系统上运行bundleexecrspecspec/时,我收到以下错误:invalidswitchinRUBYOPT:-F(RuntimeError)我正在运行ruby​​1.9.2p136(2010-12-25)[i386-mingw32](安装在c:\ProgramFiles(x86)\Ruby192)和bundler1.0.15(作为ruby​​gem安装).关于如何解决这个问题的任何线索?谢谢,本 最佳答案 Bundler不喜欢Ruby的路径包含空格这一事实。为了解决这个问题,我编辑了runtime

  10. ruby-on-rails - REXML::RuntimeError(实体扩展变得太大) - 2

    今天升级到Ruby-1.9.3-p392后,REXML在尝试检索超过一定大小的XML响应时抛出运行时错误-一切正常,当接收到25条以下的XML记录时不会抛出错误,但是一旦达到特定的XML响应长度阈值,我收到此错误:Erroroccurredwhileparsingrequestparameters.Contents:RuntimeError(entityexpansionhasgrowntoolarge):/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/rexml/text.rb:387:in`blockinunnormalize'我意识到这在最

随机推荐