从不同函数的数组中检索值

时间:2019-10-27 08:58:04

标签: c arrays segmentation-fault global-variables

我正在尝试用c语言编写一个程序,该程序在main函数中声明了数组的长度,然后调用了一个函数并分配了内存并初始化了值,然后main函数打印了这些值。我已经全局声明了数组及其长度,但是当主函数从数组“检索”值时,我得到了一个段错误,我认为这是因为只有数组上的指针是全局的,而不是值本身。除了合并功能外,还有什么方法可以解决?

1 个答案:

答案 0 :(得分:0)

  

我正在尝试用c语言编写一个程序,该程序在main函数中声明了数组的长度,然后调用了一个函数并分配了内存并初始化了值,然后main函数打印了这些值。 / p>

#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;
}
  

我已经全局声明了数组及其长度,但是当主函数从数组中“检索”值时,我得到了一个段错误,我认为这是因为只有数组上的指针是全局的,而不是重视自己。

尽量避免使用全局变量。
不要混淆数组和指针。参见the c-faq的第6节。

  

除了合并功能之外,还有其他解决方法吗?

是的