【问题标题】:How to pass a dynamic array to a function in C, along with the index position?如何将动态数组以及索引位置传递给 C 中的函数?
【发布时间】:2021-01-24 07:45:54
【问题描述】:

我需要这个功能来将动态分配的数组和 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;
}

【问题讨论】:

  • void fucn(int *int_ptr, int **arr_ptr) --> void fucn(int *int_ptr, int *arr_ptr) , fucn(&amp;i, &amp;array); -- fucn(&amp;i, array); ,你想要一个指针,而不是指向指针的指针。并照顾阅读障碍fucn --> func :)
  • 谢谢,它正在工作!明白了。
  • 取消对指针的引用会产生一个指针,您不能为该指针分配一个整数,否则您会覆盖传递的指针,并且它会在稍后再次访问时崩溃。
  • @DavidRanieri 那么为什么在我分配值 1 时没有发生段错误,只有在我尝试分配值 2 时才会发生段错误。
  • 这就是为什么我说 然后尝试再次访问时崩溃 稍后

标签: c segmentation-fault dynamic-memory-allocation pass-by-pointer


【解决方案1】:

这里的问题是运算符优先级之一,*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;
}

【讨论】:

  • 哇,没想到,存在运算符优先级问题。谢谢!
  • 在我的代码中,当我分配值 1 时,它工作正常。这是为什么?只有当我尝试分配下一个值时才会导致段错误
猜你喜欢
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多