У меня есть следующий код, который используется, чтобы найти два целых числа, что сумма к данной сумме в данном срезе:Golang паника: ошибка во время выполнения: индекс вне диапазона происходит только при запуске вне отладчика
type Store_object struct {
C int
I int
Prices []int
}
//..other unrelated functions...
func FindItemPairs(scenarios []Store_object) ([]string, error) {
var results []string
for scIndex := 0; scIndex < len(scenarios); scIndex++ {
scenario := scenarios[scIndex]
for prIndex := 0; prIndex < len(scenario.Prices); prIndex++ { //<--!sc
firstItem := scenario.Prices[prIndex]
if firstItem >= scenario.C {
continue
}
for cmpIndex := prIndex + 1; cmpIndex < len(scenario.Prices); cmpIndex++ {
secondItem := scenario.Prices[cmpIndex]
switch {
case secondItem >= scenario.C:
continue
case firstItem+secondItem == scenario.C:
result := "Case #" + strconv.Itoa(scIndex+1) +
" " + strconv.Itoa(firstItem) + " " +
strconv.Itoa(secondItem)
results = append(results, result)
}
}
}
}
return results, nil
}
однако, когда Я пытаюсь запустить свой код, чтобы найти пары записи, я получаю следующее сообщение об ошибке:
panic: runtime error: index out of range
goroutine 1 [running]:
<store_credit>.FindItemPairs(0x208208000, 0x1e, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0)
<store_credit_location>.go:76 +0x4ac
main.main()
<main_dir>/test_sc.go:16 +0x24d
exit status 2
(! соответствующая строка с < отмечено - подкожно выше и < - главные ниже)
Чтобы попробовать отладить, я использовал следующий проект https://github.com/mailgun/godebug для проверки и нашел, что мой код выполнен без проблем.
В настоящее время я понятия не имею, как я бы получить доступ к значению, выходящее за пределы диапазона, но не имеют ни малейшего представления о том, как я буду отлаживать это далее ...
Любое руководство по этому вопросу было бы весьма признателен!
Для больше контекста, вот варенье код, который я пытаюсь выполнить: https://code.google.com/codejam/contest/351101/dashboard#s=p0
Edit: Для еще большего контекста, то здесь основной файл я бегу, что вызывает эту функцию:
func main() {
cases, err := store_credit.ReadLines("A-small-practice.in")
if err != nil {
fmt.Println(err)
}
fmt.Println(cases)
results, err := store_credit.FindItemPairs(cases) //<--!main
if err != nil {
fmt.Println(err)
}
for i := 0; i < len(results); i++ {
fmt.Println(results[i])
}
}
ReadLines отлично работает без проблем.
Это единственный goroutine, к которому можно обратиться к «сценариям» или к любым его предметам во время паники? – captncraig
Вы уверены, что строка 76 отмечена '<-!'? Я ожидал бы, что вне диапазона на линии до или после, но не в строке 'for'. – captncraig
@captncraig Комментарий 1: Я почти уверен, так как я не пытаюсь порождать каких-либо гортанов. Я импортирую этот код и вызываю эту функцию из другого исходного файла (моего основного источника), но моя основная функция не должна обращаться к любой из ее внутренних переменных. Комментарий 2: это строка, о которой мне рассказывают, всякий раз, когда я запускаю ее. Я так же смущен, как ты на этом фронте. – jtgoen