läuft Ich habe den folgenden Code verwendet, um zwei Zahlen zu finden, die Summe zu einem bestimmten Summe in einer gegebenen Scheibe:Golang Panik: Laufzeitfehler: Index nur außerhalb des Bereichs, wenn geschieht außerhalb Debugger
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
}
jedoch, wenn ich versuche, meinen Code ausführen, um die Begriffspaare zu finden, die ich die folgende Fehlermeldung erhalten:
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
(! entsprechende Zeile mit < bemerkt - sC oben und < - Haupt unten)
Um zu debuggen, habe ich das folgende Projekt https://github.com/mailgun/godebug zum Testen verwendet und festgestellt, dass mein Code ohne Fehler ausgeführt wurde.
Im Moment habe ich keine Ahnung, wie ich würde einen Wert zugreifen, die out-of-Bereich liegt, haben aber keine Ahnung, wie ich das weiter debuggen wird ...
Jede mögliche Anleitung hierzu wäre sehr dankbar!
Weitere Zusammenhang hier ist der Code Jam Ich versuche zu implementieren: https://code.google.com/codejam/contest/351101/dashboard#s=p0
Edit: Noch mehr Kontext, hier ist die Hauptdatei bei mir läuft, die diese Funktion aufruft:
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 funktioniert problemlos ohne Probleme.
Ist dies die einzige Goroutine, die auf Szenarios zugreifen kann, oder eines seiner Elemente zur Zeit der Panik? – captncraig
Sind Sie sicher, dass Zeile 76 mit '<-!' Markiert ist? Ich würde erwarten, dass ein Bereich außerhalb oder außerhalb der Linie vor oder nach der Linie liegt, aber nicht die "for" Linie. – captncraig
@captncraig Kommentar 1: Ich bin ziemlich sicher, da ich nicht versuche, irgendwelche Goroutines zu spawnen. Ich importiere diesen Code und rufe diese Funktion aus einer anderen Quelldatei (meiner Hauptquelle) auf, aber meine Hauptfunktion sollte nicht auf eine ihrer internen Variablen zugreifen. Kommentar 2: Das ist die Zeile, die es mir erzählt, wenn ich es benutze. Ich bin genauso verwirrt wie du an dieser Front. – jtgoen