Das Problem ist der Linksrotation in Array.Warum Segmentierungsfehler im folgenden C-Code?
Die erste Zeile enthält zwei durch Leerzeichen getrennte ganze Zahlen, die die entsprechenden Werte n
(die Anzahl der ganzen Zahlen) und d
(die Anzahl der Linksdrehungen, die Sie ausführen müssen) angeben. Die zweite Zeile enthält n
durch Leerzeichen getrennte Ganzzahlen, die die jeweiligen Elemente des Ausgangszustands des Arrays beschreiben.
Meine Lösung:
#include <stdio.h>
#include <malloc.h>
int main() {
int n, d, i;
scanf("%d %d", &n, &d);
int *a = (int *)malloc(sizeof(int) * n);
int *temp = (int *)malloc(sizeof(int) * d);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
for (i = 0; i < d; i++)
temp[i] = a[i];
for (i = 0; i < n - d; i++)
a[i] = a[i + d];
for (i = 0; i < n; i++)
a[i + n - d] = temp[i];
for (i = 0; i < n; i++)
printf("%d ", a[i]);
return 0;
}
Sie ignorieren den Rückgabewert von 'scanf'; ein fataler logischer Fehler. –
Was ist die Eingabe? Sie erhalten immer SIGSEGV wenn d> n. – 4pie0
Verwenden Sie einen Debugger. Verwenden Sie debug printfs. Lernen Sie grundlegende Debugging-Techniken (das sofortige Veröffentlichen auf SO ist keine großartige Debugging-Technik, obwohl viele Leute davon ausgehen, dass sie dies tun). Und bitte wählen Sie nur die relevanten Sprach-Tags aus. C und C++ sind nicht die gleiche Sprache. – kaylum