Maison > développement back-end > Golang > Comment attribuer correctement une valeur à un pointeur Int dans Go ?

Comment attribuer correctement une valeur à un pointeur Int dans Go ?

Susan Sarandon
Libérer: 2024-12-15 17:50:14
original
333 Les gens l'ont consulté

How to Correctly Assign a Value to an Int Pointer in Go?

Définition d'un pointeur Int sur une valeur Int dans Go

Dans Go, une tâche courante consiste à attribuer une valeur à un pointeur int. Cependant, une erreur récemment découverte dans un extrait de code met en lumière un piège potentiel :

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var guess *int
    fmt.Println(reflect.TypeOf(guess))
    *guess = 12345
    fmt.Println(guess)
}
Copier après la connexion

Lors de l'exécution de ce code, l'erreur suivante se produit :

Type: *int
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x483c7d]

goroutine 1 [running]:
main.main()
    /home/aaron/projects/gopath/src/github.com/AaronNBrock/go-guess/main.go:16 +0x9d
exit status 2
Copier après la connexion

La cause première réside dans le fait que la valeur du pointeur est initialement définie sur zéro. Le déréférencement d'un pointeur nul génère une erreur d'exécution, comme le montre le message d'erreur. La solution réside dans l'allocation de mémoire au pointeur avant de tenter de lui attribuer une valeur :

var guess *int
guess = new(int)
*guess = 12345
Copier après la connexion

Cette modification garantit que deviner pointe vers un emplacement mémoire valide, nous permettant de définir et de récupérer sa valeur.

Alternativement, l'utilisation d'une courte déclaration de variable peut simplifier le code :

guess := new(int)
*guess = 12345
Copier après la connexion

Une autre approche consiste à attribuer l'adresse d'une variable existante au pointeur :

value := 12345 // will be of type int
guess := &value
Copier après la connexion

Cette solution pointe vers une variable existante, plutôt que d'allouer une nouvelle mémoire. Changer la valeur pointée modifie également la valeur de la variable d'origine.

Enfin, gardez à l'esprit que pointer un pointeur vers un emplacement et lui attribuer une valeur sont des opérations distinctes. Le premier alloue de la mémoire ou place le pointeur sur une variable existante, tandis que le second modifie la valeur stockée à l'emplacement pointé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal