Ошибка сегментации (дамп ядра) (очень простая программа)

У меня возникла проблема с написанием очень простой программы для изучения массивов на C. Сообщение появляется, когда размер массива превышает 2. SO: Linux, Clear Linux OS 64 бита

#include <stdio.h>

int main (void) {
    int array[0], k=0, init;
    
    printf ("Insert amount of values\n");
    scanf ("%i", &init);

    for (k=1; k<=init; k++) {
        printf ("Insert values:");
        scanf ("%i", &array[k]);
    }
    for (k=1; k<=init; k++) {
        printf("%i,", array[k]);
    }

     return 0;
}
Insert amount of values
3
Insert values:4
Insert values:2
Insert values:3
Segmentation fault (core dumped)

Пробовал изменить тип данных массива и "%i" на "%d"

Подсказка: сколько значений можно хранить в массиве нулевой длины?

tadman 27.10.2022 17:37

вы объявили array длину 0, она не изменяется автоматически

CoffeeTableEspresso 27.10.2022 17:37

Массивы в C не являются динамическими.

Some programmer dude 27.10.2022 17:38

Также помните, что индексы массива отсчитываются от нуля. Таким образом, массив из init элементов будет иметь индексы от 0 до init - 1 (включительно).

Some programmer dude 27.10.2022 17:38

Возможно, вы захотите держаться подальше от %i, так как это может иметь непредвиденные последствия. %d здесь условность.

tadman 27.10.2022 17:39

@tadman и CoffeeTableEspresso Я инициализировал его с 0, это неправильно?

Hernan 27.10.2022 17:45

@ Эрнан, да. Когда вы создаете массив в C, его размер фиксирован. Поэтому, если вы создадите массив нулевой длины, вы не сможете хранить в нем более 0 элементов.

CoffeeTableEspresso 27.10.2022 17:49
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
7
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы инициализируете массив размером 1 с помощью int array[0].

У вас есть два варианта:

  1. Вы объявляете массив с наибольшим ожидаемым размером для примера int array[10], но вы просто сообщаете о своей проблеме и получаете segfault при введенном 11-м значении.

  2. Вы динамически управляете размером своих массивов с помощью функции malloc.

Примечание: sizeof(array) == 0, а не 1.

Johnny Mopp 27.10.2022 21:12

Другие вопросы по теме