Funktion ändert übergebenen Zeiger nicht C++

Lesezeit: 3 Minuten

Funktion andert ubergebenen Zeiger nicht C
Kontrolle

Ich habe meine Funktion und ich fülle aus targetBubble dort, aber es wird nach dem Aufruf dieser Funktion nicht gefüllt, aber ich weiß, dass es in dieser Funktion gefüllt wurde, weil ich dort Ausgabecode habe.

bool clickOnBubble(sf::Vector2i & mousePos, std::vector<Bubble *> bubbles, Bubble * targetBubble) {
    targetBubble = bubbles[i];
}

Und ich gebe den Zeiger so weiter

Bubble * targetBubble = NULL;
clickOnBubble(mousePos, bubbles, targetBubble);

Warum funktioniert es nicht?

Weil Sie eine Kopie des Zeigers übergeben. Um den Zeiger zu ändern, benötigen Sie Folgendes:

void foo(int **ptr) //pointer to pointer
{
    *ptr = new int[10]; //just for example, use RAII in a real world
}

oder

void bar(int *& ptr) //reference to pointer (a bit confusing look)
{
    ptr = new int[10];
}

  • Aber wenn ich Ihren Ansatz versuche, stürzt es in dieser Zeile ab *targetBubble = bubbles[i]; und ich gebe Argumente wie dieses weiter clickOnBubble(mousePos, bubbles, &targetBubble);

    – Kontrolle

    7. August 2012 um 9:28 Uhr

  • @user1295618: Welchen Fehler siehst du? Möglicherweise ist i außerhalb der Reichweite

    – Andreas

    7. August 2012 um 9:35 Uhr


  • @ user1295618: Bitte stellen Sie eine neue Frage und posten Sie dort Ihren neuen Code. Denn es ist schwer zu sagen, was das Problem ist, ohne Ihren tatsächlichen Code zu sehen

    – Andreas

    7. August 2012 um 9:42 Uhr

  • @ user1295618: Sie sind gleich und sollten beide funktionieren. Möglicherweise haben Sie ein undefiniertes Verhalten in Ihrem Programm und es funktioniert von Start zu Start unterschiedlich

    – Andreas

    7. August 2012 um 9:51 Uhr

  • @Andrew Der erste kann durch Zeigerdereferenzierung Segmentierungsfehler verursachen?

    – Sohaib

    16. Mai 2017 um 2:03 Uhr

Funktion andert ubergebenen Zeiger nicht C
Daniel Daranas

Sie übergeben den Zeiger als Wert.

Pass a Verweis auf den Zeiger wenn Sie möchten, dass es aktualisiert wird.

bool clickOnBubble(sf::Vector2i& mousePos, std::vector<Bubble *> bubbles, Bubble *& t)

  • +1. Die erste Antwort, die es im Kontext von C++ richtig macht. Antworten, die doppelt indirekte Zeiger vorschlagen, sind die alte Methode von C, dies zu tun.

    – paxdiablo

    7. August 2012 um 9:02 Uhr

wenn du schreibst

int b = 0;
foo(b);

int foo(int a)
{
  a = 1;
}

Sie ändern ‘b’ nicht, weil a eine Kopie von b ist

Wenn Sie b ändern möchten, müssen Sie die Adresse von b übergeben

int b = 0;
foo(&b);

int foo(int *a)
{
  *a = 1;
}

Gleiches gilt für Zeiger:

int* b = 0;
foo(b);

int foo(int* a)
{
  a = malloc(10);  // here you are just changing 
                   // what the copy of b is pointing to, 
                   // not what b is pointing to
}

Um also zu ändern, wo b zeigt, um die Adresse zu übergeben:

int* b = 0;
foo(&b);

int foo(int** a)
{
  *a = 1;  // here you changing what b is pointing to
}

hth

1647135607 66 Funktion andert ubergebenen Zeiger nicht C
Mathematiker1975

Sie können den Zeiger nicht ändern, es sei denn, Sie übergeben ihn als (nicht konstante) Referenz oder als Doppelzeiger. Durch Wertübergabe wird eine Kopie des Objekts erstellt, und alle Änderungen am Objekt werden an der Kopie vorgenommen, nicht am Objekt. Sie können das Objekt ändern, auf das der Zeiger zeigt, aber nicht den Zeiger selbst, wenn Sie als Wert übergeben.

Lesen Sie diese Frage, um die Unterschiede genauer zu verstehen. Wann soll in C++ als Referenz und wann als Zeiger übergeben werden?

995590cookie-checkFunktion ändert übergebenen Zeiger nicht C++

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy