向结构体中的变量赋值时为什么会产生段错误?
打算写生成随机数并写入文件的代码,但是在运行到向结构体中元素赋随机数的值时产生了段错误。段错误发生在第一个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;
}
```
如果不用结构体而是用数组的话就没问题,想知道原因。多谢各位!! 展开
段错误发生在第一个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;
}
```
如果不用结构体而是用数组的话就没问题,想知道原因。多谢各位!! 展开
1个回答
展开全部
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();
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询