C:从函数外部访问指针

标签 c arrays pointers segmentation-fault

我有以下代码:

int takeEven(int *nums, int numelements, int *newlist) {
    newlist = malloc(numelements * sizeof *newlist);
    int i, found = 0;
    for(i = 0; i < numelements; ++i, nums++) {
        if (!(*nums % 2)) {
            *(newlist++) = *nums;
            found++;
        }
    }
    newlist -= found;
    printf("First number found %d\n", *newlist); // <= works correctly
    return found;

}

int main()
{
    int nums[] = {1,2,3,4,5};
    int *evenNums;
    int i;
    int n = takeEven(nums, sizeof(nums) / sizeof(*nums), evenNums);
    for (i = 0; i < n; ++i) {
        printf("%d\n", *(evenNums++));
    }
    return 0;
}

以上代码的输出:

-1
2088999640
2088857728

如果我尝试在返回函数之前打印 newlist 指针的第一个元素 (printf("First number found %d\n", *newlist);) ,它按预期工作,但为什么当我尝试从函数外部访问指针时,我从看似未分配的地址中获取这些值?

最佳答案

您正在按值传递 newList 指针,因此它不会被您的函数修改。你应该这样做。

int takeEven(int *nums, int numelements, int **newlist) {
    *newlist = malloc(numelements * sizeof *newlist);
    ...
}

...

int n = takeEven(nums, sizeof(nums) / sizeof(*nums), &evenNums);

关于C:从函数外部访问指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1747602/

相关文章:

c - 跟踪函数调用

c++ - 实现外部mergesort。如何开始?

arrays - 新人需要帮助获得正确的正则表达式

php - 如何将数组插入mysql数据库?

c++ - 均衡对象时复制数组

c - 每次从用户获取输入时,链表都会在末尾输入节点,但任何方法都会出现问题

c - 处理流媒体服务器

javascript - 在数组的 2/3 上调用自身的排序算法

非 const 指针成员上的 C++ const 方法

c - 我如何将二维数组结构中的值替换为 c 中二维数组结构的不同值和打印函数?