顺序表初始化问题
IDE:clockblocks
语法没有错误,运行时,运行InitList_Sq函数后出现应用程序错误~为什么?
- C/C++ code
#include <stdio.h>#define LIST_INIT_SIZE 1#define LISTINCREMENT 1struct SqList{ int *elem; int length;//元素个数 int listsize;//存储空间大小};void InitList_Sq(struct SqList *L){ L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int)); L->length=0; L->listsize=1; printf("请为初始化顺序表输入递增有序的整数:\n"); int value; while(scanf("%d",&value)!=EOF)//回车 Ctrl+Z 回车 { if(L->length==L->listsize) { L->elem=(int *)realloc(L->elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(int)); } L->elem[L->length++]=value; }}void Print_Sq(struct SqList *L){ int counter; for(counter=0;counter<L->length;counter++) printf("%d ",L->elem[counter]); printf("\n");}[解决办法]
L->elem=(int *)realloc(L->elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(int));
==>
L->elem=(int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
L->listsize += LISTINCREMENT;
[解决办法]
楼主该不会是在主函数里面用野指针了吧?
我用下面的代码没有问题……
- C/C++ code
#include <malloc.h>#include <string.h>#include <stdio.h>#define LIST_INIT_SIZE 1#define LISTINCREMENT 1struct SqList{ int *elem; int length;//元素个数 int listsize;//存储空间大小};void InitList_Sq(struct SqList *L){ L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int)); L->length=0; L->listsize=1; printf("请为初始化顺序表输入递增有序的整数:\n"); int value; while(scanf("%d",&value)!=EOF)//回车 Ctrl+Z 回车 { if(L->length==L->listsize) { L->elem=(int *)realloc(L->elem,(L->length+LISTINCREMENT)*sizeof(int));//mark } L->elem[L->length]=value;//mark L->length+=LISTINCREMENT;//mark }}void Print_Sq(struct SqList *L){ int counter; for(counter=0;counter<L->length;counter++) printf("%d ",L->elem[counter]); printf("\n");}int main(){ struct SqList L; InitList_Sq(&L); Print_Sq(&L); system("pause");}
[解决办法]
to楼上
你的指针很野……
L都没有分配空间(_)
[解决办法]
[解决办法]
#include <stdio.h>
#include "stdlib.h"
#define LIST_INIT_SIZE 1
#define LISTINCREMENT 1
struct SqList
{
int *elem;
int length;//元素个数
int listsize;//存储空间大小
};
struct SqList *L=(struct SqList *)malloc(sizeof(struct SqList));;
void InitList_Sq()
{
L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
L->length=0;
L->listsize=1;
printf("请为初始化顺序表输入递增有序的整数:\n");
int value;
while(scanf("%d",&value))//回车 Ctrl+Z 回车
{
if(L->length==L->listsize)
{
L->elem=(int *)realloc(L->elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(int));
}
L->elem[L->length++]=value;
}
}
void Print_Sq(struct SqList *L)
{
int counter;
for(counter=0;counter<L->length;counter++)
printf("%d ",L->elem[counter]);
printf("\n");
}
void main()
{
InitList_Sq();
Print_Sq(L);
}