c - 这个addfront()函数与nalloc()一起用于链表是错误的吗?

标签 c pointers

此代码取自:本lecture notes pdf第20-21页来自 OCW。

 struct node∗ nalloc ( int data )
 { 
    struct node∗ p=( struct node ∗) malloc ( sizeof (node )) ; 
    if ( p!=NULL) {
        p−>data=data ;
        p−>next=NULL;
    }
    return p;
 }

struct node∗ addfront ( struct node∗ head , int data )
{ 
    struct node∗ p= nalloc (data ); 
    if ( p==NULL) return head ;
    p−>next=head;
    return p;
}

我认为代码是错误的,因为指针 p 是 nalloc() 的本地指针,并且在 addfront() 中使用它会产生未定义的行为。我见过the answer to this question并相信我是正确的,但有人可以验证吗?

最佳答案

函数是对的。但你的逻辑并没有那么错误。变量 p 实际上是本地变量,当函数返回时将不再存在。不过,p 并不是您用 malloc 分配的内存,而是一个存储您分配的内存地址的变量。

因此,语句return p;将返回p的副本,即您使用分配的内存地址的副本malloc()

在链接的问题中,用户创建一个本地数组并返回指向它的指针。看,该数组是本地的,现在使用newmalloc()动态分配。所以他的变量实际上包含(自动)分配的内存,而不是它的地址。但是,仅返回地址,因此内存丢失。

关于c - 这个addfront()函数与nalloc()一起用于链表是错误的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59819470/

相关文章:

c - 将多维 char 数组传递给 C 中的 void 函数时出错

c - 嵌入式系统上的外部文件资源(C语言加FAT)

c++ - 指向模板函数的空指针

c++ - 使用 STL 队列 pop() 销毁类指针

c - 尝试在 C 中释放结构时出现问题

c - 在C中读取数据文件中的条目数

c - Main.c :3:9: error: expected ‘=’ , ‘,’ 、 ‘;’ 、 ‘asm’ 或 ‘__attribute__’ 位于 ‘{’ token 之前

c - sizeof char 指针和指向指针的指针

swift - 使用指针解析检索 PFObject

c - 使用 while 循环检查 struct 的内容