C6298
Aviso C6298: o uso de uma seqüência de somente leitura <ponteiro>sistema autônomo um argumento de seqüência de caracteres gravável: Isso irá tentar gravar em estática memória somente para leitura e causar falhas aleatórias
Este aviso indica o uso de uma seqüência de caracteres constante sistema autônomo um argumento para uma função que pode modificar o Sumário dessa seqüência de caracteres.Como o compilador aloca seqüências de caracteres constante em uma estática memória ROM, qualquer tentativa de modificá-lo causar violações de acesso e travamentos aleatórios.
Isso pode ser evitado, armazenando a seqüência de caracteres constante em uma matriz local e, em seguida, usando a matriz sistema autônomo o argumento da função.
Exemplo
O código de exemplo a seguir gera este aviso:
#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 );
}
Para corrigir esse aviso, use o código de exemplo a seguir:
#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 );
}