Получить значения из массивов в разных функциях - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь написать программу на языке c, в которой длина массива объявлена ​​в главной функции, затем вызывается функция, выделяется память и инициализируются значения, а затем основная функция печатает значения. Я объявил массив и его длину глобально, но когда основная функция «извлекает» значения из массива, я получаю segfault, который, как я полагаю, происходит потому, что глобальным является только указатель на массив, а не сами значения. Есть ли способ решения этой проблемы, кроме слияния функций?

1 Ответ

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

Я пытаюсь написать программу на языке c, в которой длина массива объявляется в главной функции, затем вызывается функция, выделяется память и инициализируются значения, а затем основная функция печатаетvalues.

#include <stdio.h>
#include <stdlib.h>
int *foo(size_t len) {
    int *values = calloc(len, sizeof *values);
    if (values) {
        values[2] = 42;
    }
    return values;
}
int main(void) {
    size_t len = 5; // length of array declared in main()
    int *p = foo(len); // foo() allocates and initializes
    for (int k = 0; k < len; k++) printf("%d: %d\n", k, p[k]); // main() prints the values
    free(p);
    return 0;
}

Я объявил массив и его длину глобально, но когда основная функция «извлекает» значения из массива, я получаю segfault, который, я полагаю,потому что только указатель на массив является глобальным, но не сами значения.

Старайтесь избегать глобальных значений.
Не путайте массивы и указатели. См. Раздел 6 c-faq .

Есть ли способ решения этой проблемы, кроме слияния функций?

Да.

...