Простой вопрос по указателям и как инициализировать массив в C - PullRequest
1 голос
/ 15 октября 2019

У меня есть вопрос о простой программе, которую я написал для инициализации массива по одному элементу за раз, несколько строк кода приведены ниже:

#include <stdio.h>
int main(void)
{
int *ptr;
int index;
for (index = 0; index < 4; index++)
    {
    ptr[index]=index;
    printf("%d\n", ptr[index]);
    }
return 0;
}

Все просто и ясно, но когда я запускаюПрограмма, которую я несу в ошибке сегментации (core dumped), которая, насколько я понимаю, возникает, когда вы пытаетесь написать что-то, что только доступно для чтения или если вы превысили допустимую память ... Извините за этот, вероятно, ноббистский вопрос, но я не смогнайти похожий вопрос по SO.

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Вы не можете просто использовать int *ptr и рассматривать его как массив. Вам нужно создать массив и выделить для него место, указав размер. Вы можете сделать его как массив, как в первом варианте, или выделить его, используя malloc() во втором варианте. Я предлагаю первый, потому что он выполняется быстрее, и кажется, что ваш массив имеет фиксированную длину. Второй вариант предназначен для приложений, в которых вы не знаете размер массива до времени выполнения.

#include <stdio.h>
int main(void)
{
int ptr[4]; //you need to specify array size first
int index;
for (index = 0; index < 4; index++)
    {
    ptr[index]=index;
    printf("%d\n", ptr[index]);
    }
return 0;
}

Вы также можете использовать malloc(), если хотите выделить его в куче, но обязательно free()это, чтобы освободить память, или произойдет утечка памяти.

#include <stdio.h>
int main(void)
{
int *ptr = malloc(4*sizeof(int));
int index;
for (index = 0; index < 4; index++)
    {
    ptr[index]=index;
    printf("%d\n", ptr[index]);
    }
free(ptr);
return 0;
}

Это должно решить вашу проблему

0 голосов
/ 15 октября 2019

Как указано в комментарии @ChristianGibbons, вам просто нужно выделить для массива адрес вашего указателя.

    #include <stdio.h>
    int main(void)
    {
    int sizeOfArray = 4;
    int *ptr = calloc(sizeOfArray, sizeof(int)); // line to fix
    int index;
    for (index = 0; index < sizeOfArray; index++)
        {
        ptr[index]=index;
        printf("%d\n", ptr[index]);
        }
    free(ptr);
    return 0;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...