以下程序哪里不对#include<stdio.h> #include<stdlib.h> #define MAX 10010 typedef struct{ char num[MAX]; char name[MAX]; float price; }ElemType; typedef struct{ ElemType *elem; int length; }SSTable; int main(){ SSTable table; scanf("%d",&table.length); for(int i=0;i<table.length;i++){ scanf("%s",table.elem[i].num);//elem是个指针 scanf("%s",table.elem[i].name); scanf("%f",&table.elem[i].price); } for(int i=0;i<table.length;i++){ printf("%s %s %f\n",table.elem[i].num,table.elem[i].name,table.elem[i].price); } }
时间: 2024-01-21 17:05:13 浏览: 265
该程序中存在一个问题:在定义SSTable类型的结构体时,只是定义了一个指向ElemType类型结构体的指针,但并没有为其分配空间。这导致在程序运行时,访问table.elem[i]时会出现段错误,因为elem指针并没有指向任何有效的内存地址。
解决方法是在定义SSTable结构体时,为elem指针分配足够的内存空间,可以使用malloc函数来实现。具体的代码修改如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX 10010
typedef struct {
char num[MAX];
char name[MAX];
float price;
} ElemType;
typedef struct {
ElemType *elem;
int length;
} SSTable;
int main() {
SSTable table;
scanf("%d", &table.length);
// 为elem指针分配内存空间
table.elem = (ElemType*)malloc(table.length * sizeof(ElemType));
for(int i = 0; i < table.length; i++) {
scanf("%s", table.elem[i].num);
scanf("%s", table.elem[i].name);
scanf("%f", &table.elem[i].price);
}
for(int i = 0; i < table.length; i++) {
printf("%s %s %f\n", table.elem[i].num, table.elem[i].name, table.elem[i].price);
}
// 释放内存空间
free(table.elem);
return 0;
}
```
需要注意的是,在使用malloc函数分配内存空间之后,需要在程序结束前使用free函数释放内存空间,以避免内存泄漏。
阅读全文