سؤال

The block of code here runs fine till the _read function is called, after that it changes the value of file handle variable 'fh' for no reason.

    std::string& xLogFile;
    std::string& xBuffer;
    struct _stat& xStatBuffer)

char *buffer;
buffer = (char *)malloc(sizeof(char) * xStatBuffer.st_size);
#define _O_RDONLY       0x0000  /* open for reading only */

int fh = 0, read_bytes =0;
fh = _open(xLogFile.c_str(), _O_RDONLY);  // ToDo function deprecated should be changed to fstream

if (fh ==1)
{
    if (mWriteLog) IntPkgUtil::TraceLog("Error!! Couldn't open the log file");
    return true;
}

read_bytes = _read(fh,&buffer,xStatBuffer.st_size);

_close(fh);
if (read_bytes <= 0)
{
    if (mWriteLog) IntPkgUtil::TraceLog("Error!! Couldn't read the log file");
    return true;
}
buffer[read_bytes] = '\0';
xBuffer = buffer;

This is a block of code i am using to read from a file into a buffer, but it is failing at the _read function, where the value of file handle 'fh' changes after the call to the function.

هل كانت مفيدة؟

المحلول

Fix the code as below, buffer and not &buffer. You are overwriting the stack.

read_bytes = _read(fh,buffer,xStatBuffer.st_size);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top