Проблема заключается в левом вращении в массиве.Почему ошибка сегментации в приведенном ниже коде C?
Первая строка содержит два целых числа, разделенных пробелами, обозначающие соответствующие значения n
(число целых чисел) и d
(количество левых поворотов, которое вы должны выполнить). Вторая строка содержит n
целые числа, разделенные пробелами, описывающие соответствующие элементы начального состояния массива.
Мое решение:
#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;
}
Вы игнорируете возвращаемое значение 'scanf'; фатальная логическая ошибка. –
Что такое ввод? Вы всегда будете получать SIGSEGV, когда d> n. – 4pie0
Используйте отладчик. Используйте debug printfs. Изучите базовые методы отладки (размещение сразу на SO не является отличной техникой отладки, несмотря на то, что многие думают). И, пожалуйста, выберите только соответствующие языковые теги. C и C++ не являются одним и тем же языком. – kaylum