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