Buenas.
Me tira APPCRASH muy random cuando uso esto
// otra funcion...
char copy[64];
strncpy(copy, getClipboard(), 63); // Crash
// code...
char *getClipboard()
{
char *strData;
if(OpenClipboard(NULL))
{
HANDLE hClipboardData = GetClipboardData(CF_TEXT);
if(hClipboardData != nullptr)
{
char *pchData = static_cast<char*>(GlobalLock(hClipboardData));
if(pchData != nullptr)
strData = pchData;
else strData = "\0";
GlobalUnlock(hClipboardData);
}
else strData = "\0";
CloseClipboard();
}
return strData;
}
Creo que es porque no estoy devolviendo correctamente el puntero de una cadena vaciá,como se hace ?,hay algún otro error o algo para mejorar ?.
Fíjate en qué parte falla. Ve poniendo pausas, por ejemplo. A mi me parece que va bien (no lo probé).
Siempre inicializa las variables, si OpenClipboard falla strData tiene un valor indefinido.
char *strData = "";
PD. La cadena vacia como la hiciste es correcta tambien.
ok
entonces que puede estar causando el crash (Infracción de acceso al leer la ubicación 0x00000000) ?,es muy random y no logro saber en que situación se genera.
el trace solo me marca strncpy.
@EDIT
creo que ya esta solucionado,al inicializar la variable parece no crashear mas.
voy a seguir probando por las dudas
strData = "\0";
Estas apuntando a una cadena de 2 nulos. La sintaxis correcta sería:
strData = "";
Pero vamos, eso es irrelevante para los crashs.
Si,parece que era eso :D.
Por ahora parece estar funcionado con la variable inicializada.
Gracias.
Cita de: Destro- en 17 Marzo 2014, 22:25 PM
Si,parece que era eso :D.
Por ahora parece funcionado con la variable inicializada.
Gracias.
De nadas.
PD. Por definicion una cadena esta terminada en 0 asi que si su primer byte es 0 ahi termina.