设为首页 加入收藏

TOP

申请内存的问题
2014-11-23 22:04:11 来源: 作者: 【 】 浏览:2
Tags:申请 内存 问题

初学者容易忘记申请内存的问题,在这里记录一下,以备自己粗心大意造成程序调试的麻烦。

/****************************有bug的程序****************************/


#include 
#include 
#include 

struct person {
    int age ;
    char name;
};

struct student {
    struct person abc;
    int id;
};

struct student *f1;

int main(void)
{
    f1->id = 20;
    printf("%d \n", f1->id);

    f1->abc.age = 20; 
    printf("%d \n", f1->abc.age); 

    return 0;
}

有个网友将上面这段简单的代码发到QQ群上说,到底哪里有错?怎么看都不像有错的程序呀?但是一运行就是出不来结果。这正是内存没有申请成功的原因,操作系统不让你执行,因为可能访问到了不该访问的地址。指针嘛,有时候挺野蛮的,需要慎重使用。

/****************************无bug的程序****************************/

#include 
#include 
#include 

struct person {
    int age ;
    char name;
};

struct student {
    struct person abc;
    int id;
};


int main(void)
{
    struct student *f1 = (struct student *)malloc(sizeof(struct student));
    f1->id = 20;
    printf("%d \n", f1->id);
 
    f1->abc.age = 20; 
    printf("%d \n", f1->abc.age); 

    free(f1);
    return 0;
}


修改后的程序如上,就是加多了malloc申请内存的语句,当然不使用的时候也要释放掉它,良好习惯嘛^_^。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言实现gsoap输出数据类型到XML.. 下一篇C语言项目--教师信息/学生成绩管..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: