gpt4 book ai didi

c - 这样写 ptr = &i; 是否合法?在C语言中?

转载 作者:行者123 更新时间:2023-11-30 21:32:44 24 4
gpt4 key购买 nike

我使用 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("%d\n", *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("%d\n", *ptr);
    return 0;

关于c - 这样写 ptr = &i; 是否合法?在C语言中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47153841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com