请教Segmentation fault问题

njfylong 2012-12-02 11:40:25
#include <stdio.h>
#include <stdlib.h>

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef int ElemType;

typedef struct {
ElemType *elem;
int length;
int listsize;
}Sqlist, Sq;

int InitList_Sq(Sqlist *list)
{
list->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (!list->elem)
exit(-1);
list->length = 0;
list->listsize = LIST_INIT_SIZE;

return 0;
}

int main(int argc, char **argv)
{
int result = 0;
Sqlist *list;
InitList_Sq(list);
printf("Init list success.\n");

return result;
}


编译运行后,出现Segmentation fault
...全文
217 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
njfylong 2012-12-05
  • 打赏
  • 举报
回复
引用 1 楼 Joseph_1118 的回复:
你传进去的list是一个指针,指向的数据不明确。导致访问了不属于你的内存。 这样就行了: Sqlist list; InitList_Sq(&list);
谢谢,试了下解决了,指针这块一直不是很明白~
delong45 2012-12-03
  • 打赏
  • 举报
回复
使用未初始化的指针是有危险的,一般声明时候可以写作Sqlist *list = NULL;
  • 打赏
  • 举报
回复
你使用了一个未初始化的指针,此时指针的指向是未知的,如果指向非法内存,你进行后续操作,则会出错,这种是有几率的,看运气,有的不错出错。
snakedy 2012-12-03
  • 打赏
  • 举报
回复
list没有空间
AnYidan 2012-12-03
  • 打赏
  • 举报
回复
引用 1 楼 Joseph_1118 的回复:
你传进去的list是一个指针,指向的数据不明确。导致访问了不属于你的内存。 这样就行了: Sqlist list; InitList_Sq(&list);
++
赵4老师 2012-12-03
  • 打赏
  • 举报
回复
Windows: 崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。 Linux: 进程意外退出会在当前目录下产生形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。
whizer 2012-12-03
  • 打赏
  • 举报
回复
list没有初始化.
Joseph_1118 2012-12-02
  • 打赏
  • 举报
回复
你传进去的list是一个指针,指向的数据不明确。导致访问了不属于你的内存。 这样就行了: Sqlist list; InitList_Sq(&list);

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧