红联Linux门户
Linux帮助

出了“段错误” 是怎么回事?

发布时间:2010-04-26 20:14:56来源:红联作者:windwarrior
一个线性链表的初始化程序,运行时显示“Segmentation fault" ,代码如下:
# include
# include
# include
# include

# define TRUE 1
# define FALSE 0
# define OK 1
# define ERROR 0
# define OVERFLOW -1

struct sqlist
{
int * p;
int length;
int listsize;
}sqlist;

int Initlist_sq(struct sqlist * L, int LIST_INIT_SIZE)
{
L->p = (int * )malloc(LIST_INIT_SIZE * sizeof(int));
if ( L->p== NULL ) exit(OVERFLOW);
L->length = 0;
L->listsize = LIST_INIT_SIZE;
return OK;
}

void main()
{
struct sqlist * p;
int status = 0;
status = Initlist_sq(p, 100);
if( status)
printf("memory allocation succeed\n");
else
printf("memory allocation failed\n");
}
文章评论

共有 8 条评论

  1. superherogood 于 2011-02-09 16:41:40发表:

    int *p 只能是指向int型的指针,而不能指向int型的数组,明显“status = Initlist_sq(&p, 100);”这里使得
    struct sqlist中的int型指针p越界。

  2. glxin1982 于 2010-05-14 17:36:31发表:

    status = Initlist_sq(p, 100); 之前应该先给p maclloc地址。话说我前两天就犯了类似的错误,被同事BS了下。

  3. liuchun12255 于 2010-05-14 14:31:28发表:

    引用了没有初始化的指针! 即引用了不该引用的地址!

  4. shenhao0129 于 2010-05-07 10:50:39发表:

    后来想想,应该就是结构体指针本身没有初始化的原因把,你只是初始化了他的成员变量

  5. shenhao0129 于 2010-05-07 10:48:33发表:

    将main()函数修改为[code]void main()
    {
    struct sqlist p;
    int status = 0;
    status = Initlist_sq(&p, 100);
    if( status)
    printf("memory allocation succeed\n");
    else
    printf("memory allocation failed\n");
    }[/code]是可以通过,不明白为什么指针就死活的不可以,也许真如LS所说是个空指针把

  6. hongwen64 于 2010-05-02 22:03:18发表:

    p没初始化,是空指针。

  7. mcc天皇 于 2010-04-26 23:05:59发表:

    {:2_97:}

  8. shenhao0129 于 2010-04-26 23:04:36发表:

    明天切换到Linux下帮你debug一下试试,表面上暂时没看出问题在那