结构体中的堆空间、栈空间

本文通过《LINUX一站式编程》中的习题探讨了C语言中结构体内的堆空间和栈空间使用。unit_t1利用栈空间,无需手动释放,而unit_t2使用堆空间,需要注意手动释放。在操作字符串时,如strcpy,必须留意目标空间类型,以避免内存管理错误。
摘要由CSDN通过智能技术生成

看到《LINUX一站式编程》中有个习题,主要涉及堆空间和栈空间:

有两个结构体unit_t1和unit_t2,其中unit_t1申请了栈空间,不需要自己去考虑使用后释放空间的事情。unit_t2中申请了堆空间,需要自己释放。

定义部分如下

/* populator.h */
#ifndef POPULATOR_H
#define POPULATOR_H

typedef struct { 
    int number; 
    char msg[17];
    }unit_t1;

typedef struct { 
    int number; 
    char* msg;
    }unit_t2;

extern void set_unit_1(unit_t1 *p);

extern void set_unit_2(unit_t2 *p);
extern void delete_unit_2(unit_t2 *p);

#endif
  

实现部分如下

/* populator.cpp */
#include <string.h>
#include "populator.h"

void set_unit_1(unit_t1 *p)
{ 
    if (p == NULL) 
        return; 
    p->number = 3;
    strcpy(p->msg, "Hello World!");
}

void set_unit_2(unit_t2 *p)
{ 
    if (p == NULL) 
        return; 
    p->number = 3;
    p->msg= new char[17];
    strcpy(p->msg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值