• 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


  • 相关阅读:
    逆序对
    【模板】树状数组 1
    【模板】树状数组2
    发射站
    质量检测
    【模板】ST表
    winform ComBox绑定数据
    JavaScript CheckBox实现全选和部分选择
    webbrowser内容滚动(javascript内容无缝滚动)
    double? int?
  • 原文地址:https://www.cnblogs.com/pxyufeng/p/4159135.html
Copyright © 2020-2023  润新知