gcc编译通过,运行却显示“段错误”的解决方法

    ​第一次在Liunx上(liunx mint 17)使用gcc编译c文件,竟然提示“找不到stdio.h",经过google后发现执行

sudo apt-get install build-essential

即可,详见:http://slipper-99933.blog.163.com/blog/static/39954044201021651833785/

正文:

    ​刚学习了柔性数组,照教程写了用柔性数组生成斐波那契数列,经过一翻修改后gcc编译通过,运行时却提示“段错误”。google一下说很可能是数组赿界导致的内存访问错误。仔细检查果然是因为对未赋值的指针进行访问的缘故。
    ​为避免这类问题以后凡是定义指针都要先初始化,还要严格注意对指针先赋值后访问。
    ​
    ​修改前:

复制代码
typedef struct _soft_array
{
    int len;
    int array[];
}softarray;

softarray* create_soft_array(int size)
{
    softarray* ret;
    ret->len = size;
    if( size > 0 )
    {
       return ret = (softarray*)malloc( sizeof(*ret) + sizeof(int)*size );
    }
    return ret = NULL;
}
复制代码

 

    ​修改后:

复制代码
typedef struct _soft_array
{
    int len;
    int array[];
}softarray;

softarray* create_soft_array(int size)
{
    softarray* ret = NULL;
    if( size > 0 )
    {
        ret = (softarray*)malloc( sizeof(*ret) + sizeof(int)*size );
        ret->len = size;
    }
    return ret;
}
复制代码

 

 


 

 

date:2014-10-25


posted @   yufenga  阅读(828)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示