首页 > 解决方案 > 如何将动态数组以及索引位置传递给 C 中的函数?

问题描述

我需要此功能将动态分配的数组和 idx 都传递给函数并为其赋值。当我尝试分配代码中提到的值 2 时,会发生段错误。这有什么问题?我该如何解决?

#include <stdio.h>
#include <stdlib.h>  
void fucn(int *int_ptr, int **arr_ptr)
{

    *arr_ptr[*int_ptr] = 1;

    (*int_ptr)++;
    //*arr_ptr = *arr_ptr + 1;

    *arr_ptr[*int_ptr] = 2;
}

int main(int argc, char const *argv[])
{
    int *array = calloc(4, sizeof(int));
    int i = 0;
    fucn(&i, &array);
    printf("%d%d", array[0], array[1]);
    free(array);
    return 0;
}

标签: csegmentation-faultdynamic-memory-allocationpass-by-pointer

解决方案


这里的问题是运算符优先级之一,*arr_ptr[i]不等同于(*arr_ptr)[i]在这里真正想要的,尽管直接传递给你的函数会更好array,即让它将指针int作为第二个参数,没有需要额外的间接级别。

所以你应该有:

void func(int *int_ptr, int **arr_ptr)
{
    (*arr_ptr)[*int_ptr] = 1;

    (*int_ptr)++;

    (*arr_ptr)[*int_ptr] = 2;
}

或者:

void func(int *int_ptr, int *arr_ptr)
{
    arr_ptr[*int_ptr] = 1;

    (*int_ptr)++;

    arr_ptr[*int_ptr] = 2;
}

推荐阅读