#include<iostream>
#include<string>
#include<cstdlib>
#include<fstream>
using namespace std;
#define MAXSIZE 100
typedef struct
{
string num;
string name;
string phone;
}Type;
typedef struct
{
Type *data;
int size;
}SeqList;
int IniList(SeqList &L)
{
L.data=(Type*)malloc(MAXSIZE*sizeof(Type));
if(L.data==NULL)
{
cout<<"overflow"<<endl;
return 0;
}
L.size=0;
return 1;
}
void InsertRear(SeqList &L,Type item)
{
if (L.size ==MAXSIZE)
cout<<"Insert:SeqList is full!"<<endl;
L.data[L.size]=item;
L.size++;
}
int main()
{
SeqList L;
Type temp;
int i;
if( !IniList(L) ) cout<<"error"<<endl;
else
{
while( cin>>temp.num>>temp.name>>temp.phone )
{
if(temp.num == "0" && temp.name == "0" && temp.phone == "0") break;
else
{
InsertRear(L,temp);
}
}
for(i=0; i<L.size; i++)
{
cout<<L.data[i].num<<endl;
}
}
return 0;
}
你的错误在于结构体中使用了string类型,结构体在你定义的时候大小就固定了(如果struct大小不固定,编译器就不可能让我们使用sizeof来计算大小),而string是不定长得,所以运行的时候程序试图访问越界内存时就会出现“某某某内存不能为read!”,你要么使用定长字符数组,要么定义一个指针,先动态分配内存,再将指针指向该内存,当然,分配内存后记得释放掉,你得程序就有这个问题,光知道使用malloc,不记得free。
另外,你的这种思路不是不行,但建立链表可能是更好得选择。
你的程序还有一个问题:L.data[L.size]=item;结构体的内容拷贝可不能这么干,你必须将每一项拷贝进去。
以下是代码和运行结果:
#include "iostream.h"
#include "string.h"
#include "stdlib.h"
#define MAXSIZE 100
typedef struct
{
// string num;
// string name;
// string phone;
char num[100];
}Type;
typedef struct
{
Type *data;
int size;
}
SeqList;
int IniList(SeqList &L)
{
L.data=(Type*)malloc(MAXSIZE*sizeof(Type));
if(L.data==NULL)
{
cout<<"overflow"<<endl;
return 0;
}
L.size=0;
return 1;
}
void DelRam(SeqList &L)//不要忘记释放内存
{
free(L.data);
}
void InsertRear(SeqList &L,Type item)//*
{
if (L.size ==MAXSIZE)cout<<"Insert:SeqList is full!"<<endl;
strcpy(L.data[L.size].num,item.num);
L.size++; //////
}
int main()
{
SeqList L;
Type temp;
int i;
L.size=1;////
if( !IniList(L) ) cout<<"error"<<endl;
else
{
// while( cin>>temp.num>>temp.name>>temp.phone )
while( cin>>temp.num )//调试方便
{
// if(temp.num == "0" && temp.name == "0" && temp.phone == "0") break;
if(strcmp(temp.num,"0")==0)break;//调试方便
else
{
InsertRear(L,temp);
}
}
for(i=0; i<L.size; i++)
{
cout<<L.data[i].num<<endl;
}
}
DelRam(L);
return 0;
}
另外,作为程序员应该严谨一点,不要想当然,没有调试过的话建议不要乱给答案。
这个程序在DEV C++上可以运行并出现正确结果 但是提交到PTA就会报错...
回答:当 C 语言程序能够正常编译并运行,但可能结果可疑或不对时,即,当程序没有语法错误而可能有逻辑错误时,就需要考虑使用调试 Debug功能来找出程序的 bug。 在调试过程中,可以让程序运行到设置好的断点处并暂停下来,然后通过观察相关的变量值是否正确,来判断程序的逻辑错误可能出现在哪里。 本文以 Dev-...
C++编译运行时提示无法解析的外部符号
看错误信息,编译应该没什么问题,是在链接的时候出的错,C++中,使用模板编程的时候,声明和实现都要写在头文件中,如果实现不在头文件中,就会出现链接的时候,找不到符号的情况。你把实现都放到头文件中去,应该就没什么问题了。
数据结构顺序表编译程序无法运行,提醒我在定义listinit第二排(malloc...
\/\/ 用C++编译器进行测试\/\/ 而C编译器没有bool,false,true这些变量或者常量#include <stdlib.h>#include <stdio.h>#include <malloc.h>#define OK 1#define ERROR 0#define OVERFLOW -1#define List_INIT_SPACE 100 \/\/原代码 list_INIT_SPACE#define List_INC_SPACE 10 \/\/原代码 list_...
告诉我怎么改(c++) 错误: request for member `a' in `b', which is...
1、首先在编译过程中,偶尔会遇到“c++: internal compiler error: Killed (program cc1plus)”错误,这是内存不足造成的。2、首先输入命令创建交换分区:dd if=\/dev\/zero of=\/swapfile bs=1k count=2048000,count后面的数值意思是交换分区的大小为2G。3、建立好之后,需要让系统知道它是交换分区,...
求助:关于C++数据结构,结构体数组插入失败顺序表的问题
不知道你用的什么编译器,除了字符串直接可以用来初始化对象直接赋值以外,字符串给变量赋值是不可能通过的,因此你的字符串赋值操作本身就是错误的做法,你可以参考strcopy和memcopy两个函数看看字符串的赋值操作。
编写程序求出顺序表中最大元素及其在表中的位置(用C++)
using namespace std;void main(){ int i,j;int max;int a[10];cout<<"请输入要排序的元素"<<endl;for(i=0;i<10;i++){ cin>>a[i];} for(i=1;i<10;i++){ max=a[0];if(a[i]>max){ max=a[i];j=i+1;} } cout<<"最大的数是"<<max<<endl;cout<<"在表中的...
我用c++实现一个线性顺序表,用的是void类型,没有返回值,用if后,return...
函数前面加void就是没有返回值的意思,如果加了void,函数中就不必出现return语句。如果函数中有“return;”语句,执行到这里,会跳出函数。注意是“return;”,不是“return()”。加分号就行了,不要加括号。
第32篇:Cython的容器操作-顺序表
对于有C基础的同学,这相当于C中的数组指针。编译Cython程序时,建议使用setup.py方式,以便将numpy的Python代码编译成C代码,并在setup.py文件中显式设置include_dirs参数,该参数包含numpy相关的C\/C++头部文件。在setup.py设定档中未指定numpy.get_includes()时,Cython编译器可能会遇到"fatal error: ...
c++ 数组初始化有误? 调试的时候数组下的写法是:expression cannot b...
错误有两处:一是构造函数中局部变量data覆盖了成员变量data;二是构造函数中last的初值应为-1而不为0。因为按照你的设计,last应为顺序表的末元素下标。初始化顺序表为空,故last不应该为0。改正如下(还另外添了一个print函数辅助输出顺序表):\/\/.h include <iostream> include <cstdlib> using ...
编译c++出错:parse error before 'typedef'
你的代码没有给全吧,编译都过不去啊。根本编译不到"parse error before 'typedef'"这一步,编译时直接#include"LinearList.h"找不到 是不是有头文件没给出