【问题标题】:How to use `malloc/calloc` inside a function? [closed]如何在函数中使用`malloc/calloc`? [关闭]
【发布时间】:2021-11-27 04:13:43
【问题描述】:

我想创建一个函数fill_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

我尝试了这样的 mes 函数:

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

【问题讨论】:

  • Oki,为什么我不能声明 float *T 并在我的函数 fill_table 中赋值

标签: c segmentation-fault dynamic-memory-allocation


【解决方案1】:

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

  • 必须将表声明为

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

【讨论】:

    猜你喜欢
    • 2022-06-16
    • 1970-01-01
    • 2017-12-06
    • 2014-11-13
    • 2011-05-05
    • 2012-03-02
    • 2011-07-03
    • 1970-01-01
    • 2014-10-04
    相关资源
    最近更新 更多