向结构体中的变量赋值时为什么会产生段错误?

打算写生成随机数并写入文件的代码,但是在运行到向结构体中元素赋随机数的值时产生了段错误。段错误发生在第一个for循环中。以下是出现问题的部分代码:```#include<... 打算写生成随机数并写入文件的代码,但是在运行到向结构体中元素赋随机数的值时产生了段错误。
段错误发生在第一个for循环中。以下是出现问题的部分代码:
```

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

using namespace std;
#define N 5
typedef struct {
int key;
int data;
}RecType;
typedef struct{
RecType *r;
int length=N;
}SqList;

SqList list,L1,L2,L3,L4,L5,L6;
//生成随机数写入文件
int WriteRand(){
int i;

FILE *pf=NULL;
srand((unsigned)time(NULL));
pf = fopen("C:\\Users\\hasee\\Desktop\\data.txt","a");
for(i=1;i<=N;i++){
list.r[i].key=rand();//段错误发生处
list.r[i].data=rand();
}
for(i=1;i<=N;i++){
fprintf(pf,"%-7d",list.r[i].key);
fprintf(pf,"%-7d",list.r[i].data);
fprintf(pf,"\n");
}
fclose(pf);
return 0;

}

```
如果不用结构体而是用数组的话就没问题,想知道原因。多谢各位!!
展开
 我来答
GTA小鸡
高粉答主

2019-02-22 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部

list中的成员r是一个空指针,没有指向任何有效的内存空间,试图解引用r[i]将会引发非法访问错误。

为SqList提供一个含一个int参数的构造函数,并在构造函数中为顺序表分配参数相应长度的空间,而不是使用值初始化直接为length提供固定长度值,显然更为合适。

struct SqList{
    RecType *r;
    int length;
    SqList(int n): length(n){
        r = new RecType[n];
    }
    ~SqList(){
        delete[] r;
    }
};
int main()
{
    SqList list(5);
    srand((unsigned)time(NULL));
    for(int i=0; i<5; i++)
    {
        list.r[i].key=rand();
        list.r[i].data=rand();
    }
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式