Sie versuchen, eine Double-Pointer-Variable einem Array zuzuordnen ... dies wurde ausführlich behandelt, siehe hier für Informationen dazu. Außerdem, seit Sie
deklariert haben %Vor% und versuchen Sie dann, arr
einem Doppelzeiger zuzuordnen
was garantiert nicht funktioniert, daher ein Segmentierungsfehler. Darüber hinaus ist diese Anweisung int ** ptr=(int**) arr;
tatsächlich umgesetzt in einem Typ (dh [] []) in einen anderen Typ (dh **), obwohl sie vom Typ 'int' sind. . Sie sind beide unterschiedlich und der Compiler wird das sehr unterschiedlich interpretieren ...
Du könntest es so machen:
%Vor% Nun bezieht sich *(ptr + 1)
auf die 0. Zeile, *(ptr + 2)
bezieht sich auf die 1. Zeile und so weiter. Die einzige Aufgabe für Sie besteht darin, die Marker, wo arr
verwendet wird, nicht zu überschreiten, da sonst ein Überlauf oder sogar ein Segmentierungsfehler auftreten kann ...
Was Sie jetzt tun, bedeutet, Arrays mit Zeigern zu erstellen, bei denen jeder Zeiger explizit gegossen wurde . Daher hätten Sie ein Array von Zeigern wie ( 0x00001, 0x00002, 0x00003 and 0x00004
).
Bei der Dereferenzierung verursachen diese Zeiger Ihren segfault.
Versuchen Sie
%Vor%Weitere Erklärung:
Sie sollten dem Zeiger eine Adresse zuweisen, so dass er rückgängig gemacht werden kann (ich meine * Operator). Was Sie tun ist, zeigen Sie ptr auf Speicherzelle, die die Adresse a [0] [0] hat. Daher erhalten Sie einen Segmentierungsfehler.
int arr[2][2]
ist kein Array von Arrays - es ist ein einzelnes 2D-Array. Im Speicher ist es nicht von int arr[4]
Was Sie wirklich wollen, ist
%Vor%