C6298
upozornění C6298: pomocí řetězce <pointer> jen pro čtení jako argument lze zapisovat řetězec: to pokusí zapsat do statické paměti a způsobit náhodné selhání
Toto upozornění znamená použití konstantní řetězec jako argument funkce, které mohou změnit obsah řetězce.Protože kompilátor alokuje konstantní řetězce v statickou read - only memory, pokusí upravit způsobit narušení přístupu a náhodným zhroucením.
To může zabránit ukládání konstantní řetězec do pole místní a pak pole jako argument funkce.
Příklad
Následující ukázkový kód generuje toto upozornění:
#include <windows.h>
#include <stdio.h>
void f()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof( si ) );
si.cb = sizeof( si );
ZeroMemory( &pi, sizeof( pi ) );
if( !CreateProcess(NULL,
"\"c:\\Windows\\system32\\calc.exe\"",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
puts( "CreateProcess failed." );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
Chcete-li opravit toto upozornění, použijte následující ukázkový kód:
#include <windows.h>
#include <stdio.h>
void f( )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
char szCmdLine[] = "\"c:\\Windows\\system32\\calc.exe\"";
ZeroMemory( &si, sizeof( si ) );
si.cb = sizeof( si );
ZeroMemory( &pi, sizeof( pi ) );
if( !CreateProcess(NULL,
szCmdLine,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
puts( "CreateProcess failed." );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}