Все стало еще интереснее:
char * readf(int node, char* buff, int size, int pos)
{
char block[SuperBlock.BlockSize];
//char block;
char * buf = new char[SuperBlock.BlockSize*32];
buff = new char[SuperBlock.BlockSize*32];
i_node Node;
FILE * f;
f = fopen(DISKDRIVE, "r+w");
fseek(f,0L,SEEK_SET);
int size2 = size;
fseek(f, SuperBlock.I_nodeStart+node*sizeof(i_node), SEEK_SET);
fread(&Node, sizeof(i_node), 1, f);
int j = 0;
int i = 0;
int readed = 0;
int pointer = 0;
int block_num = 0;
block_num = pos/SuperBlock.BlockSize;
if(Node.Blocks[block_num] != 65535)
{
if(pos>block_num*SuperBlock.BlockSize)
{
pos -= block_num*SuperBlock.BlockSize;
}
}
else
{
block_num = 0;
pos = 0;
}
i=pos;
for(j=block_num;Node.Blocks[j] != 65535, readed<size;j++)
{
fseek(f, SuperBlock.BlockStart+Node.Blocks[j]*SuperBlock.BlockSize, SEEK_SET);
fread(&block, SuperBlock.BlockSize, 1, f);
while(i < SuperBlock.BlockSize && readed<size)
{
buf[pointer] = block[i];
//buf++;
buf[pointer+1] = '\0';
pointer++;
i++;
readed++;
}
i = 0;
}
//memcpy(buff, buf, size);
//printf("BUFF: %s\n", buff);
fclose(f);
return buf;
}
char * read_file(int size, int desc)
{
char * b, *c;
if(OpenedFiles[desc].Node.N != -1 && desc < MAX_OPEN_FILES && desc > 0)
{
strcpy(c, readf(OpenedFiles[desc].Node.N, b, OpenedFiles[desc].Node.Size, OpenedFiles[desc].Pointer));
return c;
}
}
если в коде программы вызвать readf, то все нормально считается. А если read_file, то прога падает. Причем падение вызывает, что-то в середине readf