es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

C6001 – ¿inicializar la memoria con new?

Aquí está el código de ejemplo de mi cliente de canal con nombre para enviar una cadena a un servidor de canal con nombre utilizando Visual Studio 2019 con ISO C++ 14:

#include <windows.h>
#include <strsafe.h>
int main()
{
    DWORD cbRead = 0;
    DWORD rv = ERROR_SUCCESS;
    WCHAR *sPipename = new WCHAR[1024]();
    WCHAR *chReadBuf = new WCHAR[1024]();
    WCHAR *sMsgToSend = new WCHAR[1024]();

    StringCchCopyW(sPipename, 1024, L"\\\\.\\pipe\\{23E0D6C2-A718-4C91-A81F-4069356686C5}");
    StringCchCopy(sMsgToSend, 1024, L"test");
    CallNamedPipeW(sPipename, sMsgToSend, (DWORD)(wcslen(sMsgToSend) + 1) * sizeof(TCHAR), chReadBuf, 1024 * sizeof(TCHAR), &cbRead, 5000);

    delete[] sPipename;
    delete[] chReadBuf;
    delete[] sMsgToSend;

    return 0;
}

Estoy obteniendo errores C6001 en las tres variables en la llamada a la función, con el compilador mostrando una advertencia sobre no estar inicializadas. Están inicializadas con paréntesis ‘()’.

La solución sugerida es poner {} antes del signo ‘=’. Lo cual genera un error. Busqué en Google pero no pude encontrar una respuesta a este problema específico.

Gracias, cualquier ayuda es apreciada.</strsafe.h></windows.h>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, puedo ofrecer algunos conocimientos sobre el problema descrito. El ejemplo de código proporcionado carece de algunas inclusiones necesarias, a saber y <tchar.h>. El mensaje de error que estás recibiendo, C6001, indica que una variable puede no haber sido inicializada antes de ser utilizada, lo que puede llevar a un comportamiento indefinido. En este caso, parece que las variables en la llamada a la función CallNamedPipeW no están correctamente inicializadas, a pesar de haber sido declaradas anteriormente.

    Una posible solución es inicializar las variables utilizando llaves en lugar de paréntesis, como sugiere el compilador. Sin embargo, mencionaste que esto resultó en un error. Sin más detalles, es difícil decir por qué ocurrió esto, pero podría estar relacionado con los tipos de datos utilizados. Otra opción sería inicializar explícitamente las variables antes de la llamada a la función, utilizando los tipos de datos y los valores adecuados. Por ejemplo:

    “`c++
    DWORD cbRead = 0;
    DWORD rv = ERROR_SUCCESS;
    WCHAR* sPipename = new WCHAR[1024]{}; // inicializado explícitamente a cero
    WCHAR chReadBuf[1024]{}; // arreglo inicializado a cero
    WCHAR* sMsgToSend = new WCHAR[1024]{}; // inicializado explícitamente a cero

    StringCchCopyW(sPipename, 1024, L”\\.\pipe\{23E0D6C2-A718-4C91-A81F-4069356686C5}”);
    StringCchCopy(sMsgToSend, 1024, L”test”);
    CallNamedPipeW(sPipename, sMsgToSend, (DWORD)(wcslen(sMsgToSend) + 1) * sizeof(TCHAR), chReadBuf, 1024 * sizeof(TCHAR), &cbRead, 5000);
    “`

    Al inicializar explícitamente las variables a cero, te aseguras de que estén correctamente inicializadas antes de ser utilizadas en la llamada a la función. ¡Espero que esto sea de ayuda!</tchar.h>

Comments are closed.