如何在函数内部使用`malloc/calloc`?

How to use `malloc/calloc` inside a function?

我想创建一个函数 fill_table 来动态填充 table。 table的尾部n是在main()函数中声明的,

int n = 0;
float* *T;
void show_table(int n) {}
void fill_table(int n) {}

int main() {
    printf(" Table dimension: ");
    scanf("%d", &n);
    fill_table(n);
    show_table(n);
  return 0;
}

我总是遇到这个错误:

segmentation fault ./a.out

我尝试了这样的功能:

int n = 0;
float* *T=0;

void show_table(int n){
    printf("Show Table: \n");
    for (int i = 0; i < n; i++) {
      printf("%f ", *(T + i));
    }
}

void fill_table(int n) {
   *T=(float*)calloc(n, sizeof(float));;
  if (!T){
    printf("Memoire not allowe\n");
    exit(0);
  } else {
    for (int i = 0; i < n; i++) {
      printf("\nT[%d]= ", i+1);
      scanf("%f", (T + i));
    }
  }
}

经过反复试验,我找到了这个解决方案:

  • 必须将 table 声明为

    float* T; //not float* *T;
    
  • 函数fill_table:

    void fill_table(int n) {
       T=(float*)calloc(n, sizeof(float));;
      if (!T){
        printf("Memoire not allowe\n");
        exit(0);
      } else {
        for (int i = 0; i < n; i++) {
          printf("\nT[%d]= ", i+1);
          scanf("%f", (T + i));
        }
      }
    }
    
  • 函数show_table:

    void show_table(int n){
        printf("Show Table: \n");
        for (int i = 0; i < n; i++) {
          printf("%f ", *(T + i));
        }
    }