首先来看一下报错的代码,一直报出现段异常的问题。
报错代码
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
/*顺序表*/
#define MaxSize 10
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];
int length;
}SqList;
/*初始化顺序表*/
void initList(SqList * L){
L = (SqList *)malloc(sizeof(SqList));
L->length = 0;
}
/*构建顺序表*/
bool createList(SqList *&L, ElemType a[], int n){
if(n >= MaxSize) return false;
if(L->length == MaxSize) return false;
if(L->length + n == MaxSize) return false;
for(int i = 0; i < n; i++){
L->data[L->length++] = a[i];
}
return true;
}
/*遍历顺序表*/
void dispList(SqList *&L){
for(int i = 0; i < L->length; i++){
printf("%d ", L->data[i]);
}
printf("\n");
}
int main(){
SqList * L;
int a[] = {2,1,3,5,3,7};
initList(L);
createList(L,a,6);
dispList(L);
return 0;
}
解决:
在主函数当中,我定义了一个指向顺序表的指针然后调用初始化顺序表的方法来分配一个顺序表,但在这里出现了问题,在主函数创建的指向顺序表的指针变量没有初始化,此时指向内存的未知地址,调用初始化函数后,将指针变量的值赋给函数形参的指针变量时,此时函数形参的指针变量指向的也是主函数中的指针指向的地址。在malloc分配内存时,函数内的指针指向了初始化的顺序表,但是主函数的指针依旧指向的时未知的内存地址。因此在输出时会出现段异常。
修改代码
使用一个引用的符号&,这样主函数内的指针变量和函数内部的指针变量指向的就是同一块地址了。