Compartilhar via


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 );
}