由于某些原因,在运行程序时它拒绝输入for循环,而只是挂起。
main()
{
char *buffer;
int chunk_offset, current_chunk_number, total_chunks;
int filelen;
filelen = ReadFileintoBuffer( buffer);
printf("file read \n"); // error break point 1
int events = filelen/eventlen; // number of 512 + 2 32 bit events events with timecode
int sp = 0;
int i,j;
int toterror[25];
printf("file of length %d has %d events \n", filelen, events);
printf(" i = %d \n", i);
for( i = 0; i < events; i++)
{
printf("analyzed %d events of %d", i, events);
sp=0;
int error[13];
Analyzeevent(buffer+i*eventlen, error);
if(error[0])
{
sp = 12;
}
for( j =1; j < 13; j++)
{
toterror[j+sp] += error[j];
}
}
printf("post for loop");
Printerrs(toterror, events);
exit(0);
}
它将所有内容打印到i =(在这种特殊情况下为9727988),然后什么也没有。一切都停止了。知道发生了什么事吗?我学习了c ++,用c编程对我来说非常奇怪和尴尬。编译器不会抛出任何警告或任何东西
提前感谢您的帮助。
编辑:对于ring0继承了ReadFileintoBuffer的代码:
int ReadFileintoBuffer( char *buffer)
{
int filelen;
char text[200];
printf("Input File: " );
scanf( "%s" ,text);
FILE *file = 0;
int i;
//Open file
file = fopen(text, "rb");
if (!file)
{
fprintf(stderr, "Unable to open file \n");
exit(0);
}
//Get file length
fseek(file, 0, SEEK_END); // find the end of the file
filelen=ftell(file); // set the current pointer (currently at end from above) as file length
fseek(file, 0, SEEK_SET); // set pointer back to beginning of file
//Allocate memory
buffer=(char *)malloc(filelen+1);
if (!buffer)
{
fprintf(stderr, "Memory error! \n");
fclose(file);
return;
}
//Read file contents into buffer
fread(buffer, filelen, 1, file);
fclose(file); // clse the file, all in buffer now
return filelen;
}
答案 0 :(得分:4)
你可能会遇到一些printf的缓冲问题。尝试在for循环中添加\ n到\ n的打印。 (就像你之前的一些版画一样)
它可能正在执行所有代码,但您没有看到打印结果。
答案 1 :(得分:0)
您需要使用调试器 - gdb
这里eventlen
是什么?它的类型是什么?它的价值和filelen
的价值是多少?
int events = filelen/eventlen;
您的event
可能是否定的,因此拒绝进入此循环!
for( i = 0; i < events; i++)
答案 2 :(得分:0)
eventlen
未在此行之前定义:
int events = filelen/eventlen;
使用printf查看其值。
答案 3 :(得分:0)
看着
char *buffer;
filelen = ReadFileintoBuffer( buffer);
似乎有些事情不对。ReadFileintoBuffer
的代码,但它无法以任何方式使用buffer
参数:
buffer
是未分配的字符串因此,
buffer
之前分配ReadFileintoBuffer()
,例如使用malloc()或应该传递其引用,例如
filelen = ReadFileintoBuffer( &buffer);
这完全取决于ReadFileintoBuffer()函数。
根据 ReadFileintoBuffer()
代码
代码与buffer
一样存在问题。
本地buffer
参数在函数中分配,但其指针值不会复制到调用者的buffer
中。
有几种方法可以解决这个问题 - 如上所述,其中一种方法是将引用传递给buffer
指针,而不是它对函数的值。
filelen = ReadFileintoBuffer( &buffer); // note the &
功能本身 - buffer
相关:
int ReadFileintoBuffer( char **buffer) // note the **
{
// ...
//Allocate memory ( using *buffer instead of buffer )
*buffer=(char *)malloc(filelen+1);
if (!*buffer)
{
// ...
}
//Read file contents into *buffer
fread(*buffer, filelen, 1, file);
// ...
}
这样main()
缓冲区变量分配实际上是由该函数执行的。
请注意,您批准的解决方案无法解决问题:它只会清空printf
缓冲区...除非buffer
已修复,否则您的程序无法正常运行。
答案 4 :(得分:0)
如果你试图通过间歇性的printf来解决一些问题,那就不要和fflush'es一起使用了。 \ n也可以这样做。或者你不能说看似挂着的应用程序。