首页 > 用户发贴区 > 编程问题提问区 > 结构体变量的初始化错误
2009
06-11

结构体变量的初始化错误

在Linux下编写程序SqList.c如下


/**


*程序功能说明:顺序表初始化


*/


#include <stdio.h>
#include <stdlib.h>


/* In common use */
#define OVERFLOW -1
#define OK 1
#define LIST_INIT_SIZE 100 /* 线性表存储空间的初始分配量 */
#define LISTINCREMENT 10 /* 线性表存储空间的分配增量 */
typedef int ElemType;
typedef int Status;


typedef struct{
  ElemType *elem; /* 存储空间基址 */ /*a、问题在这里*/
  int length; /* 当前长度 */
  int listsize; /* 当前分配的存储容量(以sizeof(ElemType)为单位) */
}SqList;


Status InitList_Sq (SqList *L)
{
  /* 构造一个空的线性表L。*/
  (*L).elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
  if (! (*L).elem) exit(OVERFLOW); /* 存储分配失败 */
  (*L).length = 0; /* 空表长度为0 */
  (*L).listsize = LIST_INIT_SIZE; /* 初始存储容量 */
  return OK;
}/*InitList_Sq*/


int main()
{
  int result = 0;
  SqList *p = NULL; /*b*/
  result = InitList_Sq(p);
  printf(“The result is %d.\n”, result);
  free(p);
  exit(0);
}


编译后执行程序时出现错误,错误代码:


Segmentation fault


用gdb调试run指令提示如下:


Program received signal SIGSEGV, Segmentation fault.
0x00000000004005b5 in InitList_Sq (L=0×0) at SqList.c:21
21        (*L).elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));


查阅相关资料都说和指针未初始化,在我程序b处已经初始化p为NULL。请问这个问题该如何解决?


好长时间不用C了,都忘光啦!


结构体变量的初始化错误》有 2 条评论

  1. leiht 说:

    b处不能赋值为NULL,因为没有为它动态分配内存。

    这样,也就不能用free(p)了,应该改为free(p.elem)。

    自己马虎了,不要见怪!

  2. xstar 说:

    InitList_Sq
    FreeList_Sq
    写函数写成配对的就想malloc/free等,可以少出很多错误.

留下一个回复