用 C 写 ptr = &i; 合法吗?

  • 本文关键字:ptr c pointers gcc malloc c11
  • 更新时间 :
  • 英文 :


我使用gcc prog.c -Wall -Wextra -pedantic -std=gnu11命令在GCC上编译了以下代码。它不会生成任何警告或错误。

法典:

#include <stdio.h>
#include <stdlib.h>
int main() 
{
    int i = 10;
    int *ptr = malloc(1);
    ptr = &i; // is it legal?
    printf("%dn", *ptr);
    return 0;
}

显示10的输出。

在这里,使用malloc函数为指针分配ptr动态内存,然后ptr保存i变量的地址。

用 C 语言编写ptr = &i;是否合法?

编辑:

那么,编译器是否可以生成有关内存泄漏的警告?

这并不违法。它只是造成内存泄漏。您将永远无法在该程序的此实例中使用该分配的内存。

你能做什么?

  • 如果不需要,则根本不分配内存。

  • 您可以存储该地址。

  • 在覆盖指针中存储的内容之前,您可以释放该内存。

    int i = 10;
    int *ptr = malloc(1*sizeof(int));
    int *stored;
    if(ptr == NULL){
        fprintf(stderr,"Error in Malloc");
        exit(1);
    }
    stored = ptr; // avoiding memory leak.
    ptr = &i;  
    free(stored);
    printf("%dn", *ptr);
    return 0;
    

相关内容

  • 没有找到相关文章

最新更新