使用动态内存可能出现的问题总结(笔试题解析)

本文总结了C语言中使用动态内存分配可能出现的问题,包括访问未知内存区域,对NULL指针进行解引用访问,内存泄漏以及内存分配检查。通过实例分析了各种问题可能导致的错误结果,并提供了相应的解决方案和预防措施。
摘要由CSDN通过智能技术生成

  在使用动态内存分配程序中,常常会产生不易发现的错误,这其中就包括对NULL指针进行解引用访问未知内存区域(越界访问&访问未初始化指针指向区域),内存泄漏释放非动态内存开辟空间(向free函数传递一个并非由malloc函数返回的指针),释放动态内存开辟的部分空间空间释放后利用指针被继续使用不检查空间分配结果
问题一:访问未知内存区域
问题二:对NULL指针进行解引用访问
问题三:内存泄漏
问题四:内存分配检查


问题一:访问未知内存区域

例1:以下代码有什么问题,运行会有何结果(题目来自《C语言深度解剖》)

struct student
{
    char *name; 
    int score;
}*pstu; 
int main()
{
    pstu = (struct student *)malloc(sizeof(struct student)); 
    strcpy(pstu->name, “Jimy”);
    pstu->score = 99;
    free(pstu);
    return 0;
}

  答案:运行错误:
  error7.exe 中的 0x5b33f689 (msvcr90d.dll) 处未处理的异常: 0xC0000005: 写入位置 0xcdcdcdcd 时发生访问冲突。
  在定义结构体变量 stu 时ÿ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值