首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

【待】请教下面代码运行时为什么会出错?编译可以通过

2012-03-06 
【在线等待】请问下面代码运行时为什么会出错?编译可以通过从文件里面读出数据,以行为单位放入到FileList里

【在线等待】请问下面代码运行时为什么会出错?编译可以通过
从文件里面读出数据,以行为单位放入到FileList里面去。
当文件里面的行数(数据)较少时,运行没有问题,但如果文件里面的行数较多时,运行会出错,请教高人这是为什么?内存分配或读写方面有什么问题?谢谢!

void   f()
{
FILE   *fl;
char   **FileList;
char   *temp;

char   ch;
int   i   =   0,   j   =   0,   count   =   0,   m   =   0;
fl   =   fopen( "C:\\projects\\test\\Debug\\PBUIDList.txt ",   "rb+ ");

temp   =   new   char;


FileList   =   (char**)malloc(sizeof(char));

if(fl   ==   NULL)
{
printf( "can   not   open   the   file\n ");
return   false;
}
ch   =   fgetc(fl);

while(ch!=   EOF)
{
if(ch   ==   '\n ')
{
count++;
}
if(ch   ==   'g ')
{
ch   =   fgetc(fl);
if(ch   ==   'h ')
{
FileList[count]   =   (char*)malloc(sizeof(char));
ch   =   fgetc(fl);
while(j   <   5)
{

temp[j]   =   ch;
j++;
ch   =   fgetc(fl);
}
strcpy(FileList[count],   temp);
j   =   0;
}
}
ch   =   fgetc(fl);
}

for(m   =   0;   m   <   count;   m++)
printf( "%s\n ",   FileList[m]);

printf( "************************\n ");

for(i   =   0;   i   <   count;   i++)
{
for(j   =   0;   j   <   i;   j++)
{
if(memcmp(FileList[j],   FileList[i],   7)   >   0)
{
temp   =   FileList[j];
FileList[j]   =   FileList[i];
FileList[i]   =   temp;
}
}
}
for(m   =   0;   m   <   count;   m++)
printf( "%s\n ",   FileList[m]);

fclose(fl);

}

[解决办法]
FileList = (char**)malloc(sizeof(char));
if(FileList==NULL)
{
printf( "memory alloc failure ");

}
加这个调试看看
[解决办法]
1:
FileList = (char**)malloc(sizeof(char));
==》
FileList = (char**)malloc(sizeof(char*)); //应当分配的是 char*类型的!!
[解决办法]
char **FileList;
char *temp;
temp = new char[LEN];
FileList = (char**)malloc(sizeof(char));
FileList[count] = (char*)malloc(sizeof(char));
strcpy(FileList[count], temp);
从strcpy(FileList[count], temp);来看,你是想把temp存放到FileList[count]指向的存储空间去,所以前面malloc这个地方用错了,应该写成:
#define MAXSIZE 60
FileList[count] = (char*)malloc(sizeof(char)*MAXSIZE);
另外:
定义FileList是指针数组会比较合适吧?
char *FileList[LINE];
/*char **FileList;*/
char *temp;
temp = new char[LEN];
/*FileList = (char**)malloc(sizeof(char));即使定义char **FileList,这里也不对!应该写为FileList = (char**)malloc(sizeof(int));*/
FileList[count] = (char*)malloc(sizeof(char));
strcpy(FileList[count], temp);

热点排行