请教了,查了两天的错误,请查阅
程序模块在Debug模式下,运行是正常的,但是运行时却说内存错,不能read~~代码如下:
========================
Class Keyword_Record{
#ifndef KEYWORD_RECORD_H
#define KEYWORD_RECORD_H
#include "SMS.H"
// 关键词类,类中定义了一个关键词所包含的数据:
// 汉字字符串+汉字的个数+拼音类别码(整型数组)+控制标志串
class Keyword_Record
{
private:
char Key_WD[21]; //中文字符串10个定义
int Key_Num; //中文汉字的个数
int *Class_ID; //对应汉字拼音类别代码数组,10个int数值
char *Flag; //存储10位控制标志位
public:
// class constructor
Keyword_Record();
~Keyword_Record();
Keyword_Record(char *str1,char *str2);
void Set_PYID(int n,int* IDArray);
void Print_Meb();
char* Get_Key();
int Get_Size();
int * Get_ID_Array();
};
Keyword_Record::Keyword_Record(){};
Keyword_Record::Keyword_Record(char* strkey,char* flagstr){
//Keyword=str1;
strcpy(Key_WD,strkey);
//cout<<Key_WD<<endl;
//system("pause");
Key_Num=int(strlen(Key_WD)/2); //汉字个数,一个汉字两个字节
//cout<<Key_Num<<endl;
//system("pause");
//strcpy(Flag,flagstr); //这个不对,两个都是字符串指针,不能strcpy??
Flag=new char[10];
strcpy(Flag,flagstr);
//cout<<Key_WD<<""<<Flag<<endl;
//system("pause");
/********以下处理拼音代码数组************************/
Class_ID=new int[Key_Num];
//int *Class_ID=new int[Key_Num]; //是重定义了吗?导致内存
for (int i=0;i<Key_Num;i++){
Class_ID[i]=-1;
//cout<<Class_ID[i]; //initialize all zero firest;
}
cout<<"Constructor Ok!"<<endl;
};
//******************************************
void Keyword_Record::Set_PYID(int n,int* IDArray){
for(int i=0;i<n;i++){
Class_ID[i]=IDArray[i];
}
}
/******************/
void Keyword_Record::Print_Meb(){
cout<<Key_WD<<" ,HZ_Num="<<Key_Num<<",Class_ID:";
for(int i=0;i<Key_Num;i++)
cout<<Class_ID[i]<<"+";
cout<<",Flag:"<<Flag<<endl;
}
// class destructor
Keyword_Record::~Keyword_Record(){};
char* Keyword_Record::Get_Key(){return Key_WD;}
int Keyword_Record::Get_Size(){return Key_Num;}
int* Keyword_Record::Get_ID_Array(){return Class_ID;}
#endif // KEYWORD_RECORD_H
}
/////////////////////////////////////////////////////////////////
Keyword_Record *Keyword_Lib_A;
main(){
......
extern Keyword_Record * Keyword_Lib_A;
Keyword_Lib_A = new Keyword_Record[Keyword_Lib_Size];
//for (int i=0;i<100;i++){
// Keyword_Lib_A[i]=Keyword_Record("","");
// }
if (Keyword_Lib_A == NULL){
cout<<"Memory Allocated Error!"<<endl;
system("pause");
exit(1);
}
.....
//以下是一个函数模块在 Main中被调用,目的是从文件读取,来初始化对象数组Keyword_Lib_A[]
#include "SMS.H"
//#include "py_dic_record.h"
#include "Keyword_Record.h"
//#include "py_index_record.h"
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
using namespace std;
//void Init_Keyword_Lib(char *filename,Keyword_Record *Lib_Pointer){
void Init_Keyword_Lib_A(){
extern Keyword_Record * Keyword_Lib_A; //引用全局变量
//Keyword_Lib_A = new Keyword_Record[Keyword_Lib_Size];
//if (Keyword_Lib_A == NULL){
// cout<<"Memory Allocated Error!"<<endl;
// system("pause");
// exit(1);
// };
extern int Keyword_Lib_Size_A;
char *Keyword_File; //
char buffer[255]; //定义缓冲区,奇怪的是:不是255大小居然不行
char *tmp_HZ ;
char *tmp_FG ;
//if get file name ,outout here :
//Keyword_File=filename;
Keyword_File=Keyword_Lib_File_A;
cout<<"Keyword File is: ./"<<Keyword_File<<endl;
//system("pause");
ifstream in ;
in.open(Keyword_File);
if (!in){
cerr<<"Can't Open File Keyword_File_A"<<endl;
system("pause");
exit(1);
}
char delims[] = ","; //逗号作为分隔符
char *result = NULL;
int Flg=0; //偶数说明是获得的是关键词,奇数说明是控制位字符
int L=0;
//cout<<Keyword_Lib_Size_A<<endl;
while(in.getline(buffer,255)){
result = strtok( buffer, delims );
while( result != NULL ) { //一行结束是不是也就也会返回NULL
if (Flg %2 == 0 ){
tmp_HZ = result ; //获取关键词字符串 到临时变量
}
if (Flg %2 == 1 ){
tmp_FG = result ; //获取控制位字符串 到临时变量
}
Flg++; //下一段
result = strtok(NULL,delims);
}//一行结束 //end inner while
//Keyword_Lib_A[Line] = new Keyword_Record();
//cout<<tmp_HZ<<tmp_FG<<endl;
//cout<<"YES---------"<<Line_No<<endl;
cout<<L<<endl;
//Keyword_Record T(tmp_HZ,tmp_FG);
//T.Print_Meb();
//delete T;
//Keyword_Lib_A[L]=T;
//Keyword_Lib_A[L].Print_Meb();
Keyword_Lib_A[L] = Keyword_Record(tmp_HZ,tmp_FG);
L++;
}//end out while
in.close(); //关闭文件
in.clear();
//获得纯关键词库的大小
Keyword_Lib_Size_A=L;
//******验证数据**********
for (int k=0;k<Keyword_Lib_Size_A;k++){
Keyword_Lib_A[k].Print_Meb();
// cout<<"****"<<endl;
}
奇怪的现象是:Debug模式下,运行是正常的,但是退出运行exe程序时,就说是:“ox7c95426d”指令引用的"0x00000000"内存,改内存不能为read.....
而且,在文件Key_File_A.txt中的文本,如果是只有三行,也运行OK的,但是超过三行,就报同样的错误
请高手执教分析,在线等………………………………
谢谢各位~