您的位置:首页 > 其它

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

2014-12-12 10:20 274 查看
​第一次在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐