gpt4 book ai didi

c - "point"在这里是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 15:22:30 27 4
gpt4 key购买 nike

在某些内存分配中,我发现了这一点。但是我不明白。

char * mem_alloc()
{
char *point;
char *a;
point = (char *)malloc(block_num);

a = *(char**) point;
return a;
}

最佳答案

char * mem_alloc()

根据我的经验,返回指针的函数几乎总是程序设计有缺陷的标志。这样的指针可以指向以下内容:

  • 一个局部变量(明显的错误,UB)
  • 全局/静态(糟糕的程序设计,也不是线程安全的)
  • 动态内存(糟糕的程序设计,使用内存的代码应该处理分配,泄漏的可能性很大)
  • 或传递给函数的参数之一(糟糕的程序设计,晦涩的函数接口(interface))

在这种情况下,它指向动态内存,因此我们可能会假设程序设计不佳,并且可能会发生内存泄漏。

point = (char *)malloc(block_num);

此代码意味着编写它的人对 malloc 的工作原理和 void 指针的工作原理感到困惑。 malloc 的结果不应该进行类型转换,参见 thisthis .类型转换的冲动意味着程序员对 C 语言感到困惑,和/或他们正试图在 C++ 编译器上编译 C 代码。

“block_num”值得怀疑,如果这是一个全局的非常量变量,那么程序设计很差。

a = *(char**) point;

这意味着,获取指向堆上未初始化内存的 point 的地址,然后假设该 point 是一个指向指针的指针,从而将堆中的垃圾内容视为一个指针。然后返回这个指针,指向在 la-la land 中的一个随机位置,给调用者。并在这样做的同时造成内存泄漏。

关于c - "point"在这里是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10974813/

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