代码之家  ›  专栏  ›  技术社区  ›  asndonsadoasndo231213

使用Malloc和Free调试指针

  •  2
  • asndonsadoasndo231213  · 技术社区  · 6 年前

    考虑以下代码:

    #include < stdio.h >
    #include < stdlib.h >
    #define SIZE 10
    int main() {
        int * p, i;
        p = malloc(SIZE * sizeof(int));
        if (p == NULL) {
          printf("malloc failed.\n");
          return 1;
    
        }
        for (i = 0; i < SIZE; i++)
          * (p + i) = i * i;
    
        for (i = 0; i < SIZE; i++)
          printf("%d\n", * p++);
    
        free(p);
    
        return 0;
    }
    

    此代码无效。然而,我不知道为什么。我的教授给了我一个没有多大意义的解释。据推测 free 函数不起作用。

    据我所知,您只能释放使用malloc创建的指针。在这里,我们在将指针发送到free之前修改它,从而使我们的语句无效。

    这是批判代码的正确方式吗?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Community CDub    4 年前

    在这里,我们在将指针发送到free之前修改它,从而使我们的语句无效。

    这是批判代码的正确方式吗?

    是,代码未释放分配的原始指针,原因是 p++ 它在每次循环迭代中递增指针。

    而是以这种方式打印 p 未更改。

    for (i = 0; i < SIZE; i++) {
      // printf("%d\n", * p++);
      printf("%d\n", p[i]);
      // or
      printf("%d\n", * (p + i));
    }
    
    // With above change, `p` is the same as the original allocated value.
    free(p);