使用Malloc和Free调试指针

asn*_*213 2 c debugging gdb

请考虑以下代码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

此代码不起作用.但是我不确定为什么.我的教授给出了一个对我来说没什么意义的解释.据说这个free功能不起作用.

据我所知,你只能释放使用malloc创建的指针.在这里我们在将指针发送到空闲之前修改它,从而使我们的声明无效.

这是批评该代码的正确方法吗?

chu*_*ica 5

在这里我们在将指针发送到空闲之前修改它,从而使我们的声明无效.

这是批评该代码的正确方法吗?

是的,代码没有释放分配的原始指针,因为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);
Run Code Online (Sandbox Code Playgroud)

  • @AhmedMasud实际上,我并没有意识到这一点.我只想确认我的推理是正确的 (2认同)