读书人

【待】请教下面代码运行时为什么会出错

发布时间: 2012-03-06 20:47:55 作者: rapoo

【在线等待】请问下面代码运行时为什么会出错?编译可以通过
从文件里面读出数据,以行为单位放入到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);

读书人网 >C语言

热点推荐