Click here to Skip to main content
15,888,060 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralRe: In c++ How to deny usb read write? Pin
Member 1487268127-Jul-20 16:53
Member 1487268127-Jul-20 16:53 
GeneralRe: In c++ How to deny usb read write? Pin
Dave Kreskowiak27-Jul-20 18:16
mveDave Kreskowiak27-Jul-20 18:16 
GeneralRe: In c++ How to deny usb read write? Pin
Member 1487268127-Jul-20 18:29
Member 1487268127-Jul-20 18:29 
QuestionQueryBinaryValue to CByteArray Pin
_Flaviu24-Jul-20 4:19
_Flaviu24-Jul-20 4:19 
AnswerRe: QueryBinaryValue to CByteArray Pin
Mircea Neacsu24-Jul-20 4:28
Mircea Neacsu24-Jul-20 4:28 
GeneralRe: QueryBinaryValue to CByteArray Pin
_Flaviu24-Jul-20 5:16
_Flaviu24-Jul-20 5:16 
AnswerRe: QueryBinaryValue to CByteArray Pin
Victor Nijegorodov25-Jul-20 23:16
Victor Nijegorodov25-Jul-20 23:16 
QuestionVS2019, Code analysis warning: C6385 mystery Pin
QuiJohn23-Jul-20 2:39
QuiJohn23-Jul-20 2:39 
This is the full warning in question:
warning C6385: Reading invalid data from 'lines': the readable size is '(unsigned int)*4+4' bytes, but '8' bytes may be read.

I just (finally) converted a VS2013 project to VS2019, and as part of the cleanup I've been running the code analysis to help me spot issues. Below is a minimalist version of an oddity I found.

So here's the case that started the journey. You can assume m_iNumLines is a UINT greater than 0; checking for this and other error conditions (e.g. that the pointer is not NULL) did not eliminate the warning. Simplified for clarity, this is verbatim code that triggered the warning:

void CTestClass::SetText()
{
    CString* lines = new CString[m_iNumLines];

    for (UINT i = 0; i < m_iNumLines; i++)
    {
        // Case 1: warning C6385: Reading invalid data from 'lines':  the readable size is 
        //         '(unsigned int)*4+4' bytes, but '8' bytes may be read.
        lines[i] = "TestString";
    }

    delete[] lines;
}


I first tried covering every last (even absurd) error case to try and eliminate the warning, but changing lines[i] to *(lines + i) did it:

void CTestClass::SetText()
{
    CString* lines = new CString[m_iNumLines];

    for (UINT i = 0; i < m_iNumLines; i++)
    {
        // Case 2: No warning
        *(lines + i) = "TestString";
    }

    delete[] lines;
}


I'm not sure what about handling of CStrings & pointers would make that an improvement. But here's what really baked my noodle. If I leave both lines in - even with the code that triggered thee warning first - I no longer get the warning:

void CTestClass::SetText()
{
    CString* lines = new CString[m_iNumLines];

    for (UINT i = 0; i < m_iNumLines; i++)
    {
        // Case 3: *ALSO* No warning
        lines[i] = "TestString";
        *(lines + i) = "TestString2";
    }

    delete[] lines;
}


I also get no warning if I swapped the order (thinking maybe optimization - even in a debug build - made the first line do nothing).

In searching I found others getting this warning also when using CStrings, but in situations much more convoluted than this, and I didn't see how it explained my case. Also I get the same results when using std::string, for what it's worth.
Look at me still talking when there's science to do
When I look out there it makes me glad I'm not you

AnswerRe: VS2019, Code analysis warning: C6385 mystery Pin
Richard MacCutchan23-Jul-20 5:53
mveRichard MacCutchan23-Jul-20 5:53 
AnswerRe: VS2019, Code analysis warning: C6385 mystery Pin
Joe Woodbury23-Jul-20 9:10
professionalJoe Woodbury23-Jul-20 9:10 
Questionvs2019 + v71 + v80 Pin
hmd-omani20-Jul-20 19:50
hmd-omani20-Jul-20 19:50 
AnswerRe: vs2019 + v71 + v80 Pin
Victor Nijegorodov20-Jul-20 20:42
Victor Nijegorodov20-Jul-20 20:42 
GeneralRe: vs2019 + v71 + v80 Pin
hmd-omani20-Jul-20 23:38
hmd-omani20-Jul-20 23:38 
GeneralRe: vs2019 + v71 + v80 Pin
Victor Nijegorodov20-Jul-20 23:51
Victor Nijegorodov20-Jul-20 23:51 
GeneralRe: vs2019 + v71 + v80 Pin
Richard MacCutchan21-Jul-20 0:42
mveRichard MacCutchan21-Jul-20 0:42 
GeneralRe: vs2019 + v71 + v80 Pin
hmd-omani21-Jul-20 2:39
hmd-omani21-Jul-20 2:39 
GeneralRe: vs2019 + v71 + v80 Pin
Richard MacCutchan21-Jul-20 2:54
mveRichard MacCutchan21-Jul-20 2:54 
GeneralRe: vs2019 + v71 + v80 Pin
hmd-omani21-Jul-20 3:10
hmd-omani21-Jul-20 3:10 
GeneralRe: vs2019 + v71 + v80 Pin
Richard MacCutchan21-Jul-20 3:29
mveRichard MacCutchan21-Jul-20 3:29 
GeneralRe: vs2019 + v71 + v80 Pin
hmd-omani21-Jul-20 3:56
hmd-omani21-Jul-20 3:56 
GeneralRe: vs2019 + v71 + v80 Pin
Richard MacCutchan21-Jul-20 3:59
mveRichard MacCutchan21-Jul-20 3:59 
GeneralRe: vs2019 + v71 + v80 Pin
hmd-omani21-Jul-20 9:58
hmd-omani21-Jul-20 9:58 
GeneralRe: vs2019 + v71 + v80 Pin
Richard MacCutchan21-Jul-20 10:11
mveRichard MacCutchan21-Jul-20 10:11 
GeneralRe: vs2019 + v71 + v80 Pin
hmd-omani22-Jul-20 1:34
hmd-omani22-Jul-20 1:34 
GeneralRe: vs2019 + v71 + v80 Pin
Richard MacCutchan22-Jul-20 1:43
mveRichard MacCutchan22-Jul-20 1:43 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.