2016-10-29 1 views
-3

I die folgende Struktur als Schablone definiert haben für mich x und y zu speichern Koordinaten für Punkt:zur Ausgabe Versuch, die Koordinaten des Punktes structs C++

:

typedef struct point { 
    int x_coordinate, y_coordinate; 
}; 

I auch die folgende Funktion definiert haben,

point* get_neighbours(point p) { 
    point neighbours[4] = {}; 
    point left_neighbour, right_neighbour, upper_neighbour, lower_neighbour; 

    left_neighbour.x_coordinate = p.x_coordinate - 1; 
    left_neighbour.y_coordinate = p.y_coordinate; 
    neighbours[0] = left_neighbour; 

    right_neighbour.x_coordinate = p.x_coordinate + 1; 
    right_neighbour.y_coordinate = p.y_coordinate; 
    neighbours[1] = right_neighbour; 

    upper_neighbour.x_coordinate = p.x_coordinate ; 
    upper_neighbour.y_coordinate = p.y_coordinate+1; 
    neighbours[2] = upper_neighbour; 

    lower_neighbour.x_coordinate = p.x_coordinate; 
    lower_neighbour.y_coordinate = p.y_coordinate - 1; 
    neighbours[3] = lower_neighbour; 
    return neighbours; 
} 

Allerdings, wenn ich den folgenden Code ausführen:

erhalte ich die followin g-Ausgabe:

2 3 
-858993460 0 
-858993460 0 
14677568 14678244 

Irgendwelche Ideen warum.

+0

Sie müssen lesen und ** lernen viel mehr über C++ ** und seine [Speicherverwaltung] (https://en.wikipedia.org/wiki/Memory_management) & [RAII] (https: // en. wikipedia.org/wiki/Resource_acquisition_is_initialization). Verbringe eine Woche mit dem Lesen, zuerst über [Programmierung in C++] (http://stroustrup.com/Programming/) –

+1

BTW, solltest du in Betracht ziehen, [containers] (http://en.cppreference.com/w/cpp/container) und deklariere 'std :: vector get_neighbors (point p);' mindestens. Wahrscheinlich sollte 'point' eine' Klasse' mit einem 'std :: vector get_neighbors();' Mitgliedsfunktion (d. H. Methode) sein. –

+1

Vielen Dank. Schon in Kapitel 4 !!! –

Antwort

2

Ändern Sie diese Zeile

point neighbours[4] = {}; 

dieser

point* neighbours = new point[4]; 

Es muss auf dem Heap zugewiesen werden, weil Ihr auf Funktion Stack zugeordnet ist, so dass es Verlust an Funktion Ausgang sein wird.

+0

Also, was ist der Unterschied zwischen dem Zuordnen auf dem Stack einer Funktion und dem Zuordnen auf dem Heap. Ist der Heap der Stack für das gesamte Programm? –

+0

Nein, der Main hat seinen eigenen Stack. Heap ist der Raum für dynamisch zugewiesene. – jamesjaya

+0

@TeereraiMarange: Wir können Ihnen C++ Grundlagen hier nicht beibringen. Du musst sie woanders lernen. –

Verwandte Themen