Повреждение данных в структуре

RedHolms

Известный
Автор темы
Проверенный
617
360
Есть функция инициализации объекта сокета:
C++:
static void init_socket_instance(lua_State* L, SOCKETH_T hSocket, int family, int type, int protocol) {
    if (hSocket == INVALID_SOCKET)
        luaL_error(L, "an error occured while creating socket");
    
    SocketInfo iSocket;
    ZeroMemory(&iSocket, sizeof(iSocket));
    iSocket.hSocket = hSocket;
    iSocket.family = family;
    iSocket.type = type;
    iSocket.protocol = protocol;

    lua_pushlightuserdata(L, &iSocket); // Push SocketInfo
    luaL_newmetatable(L, SOCKET_DATA_NAME); // Create new metatable for SocketInfo(socket_data)
    lua_getglobal(L, "socket"); // Get Global Socket Table(socket)
    lua_setfield(L, -2, "__index"); // socket_data.__index = socket
    lua_setmetatable(L, -2); // Set metatable of SocketInfo to socket_data
}

Свою задачу выполняет на отлично, но есть проблемка:

В другой функции check_socket_data(ниже), при получении этой структуры, данные в ней 'повреждаются', и вместо handler'а сокета, там рандомное число.
Возможно, поможет: Значения hSocket при одном из запусков(естественно, hSocket меняется)
hSocket при инициализации = 248
hSocket при получении в функции check_socket_data = 1975321384

C++:
static SocketInfo* check_socket_data(lua_State* L) {
    return (SocketInfo*)luaL_checkudata(L, 1, SOCKET_DATA_NAME);
}

Есть функция инициализации объекта сокета:
C++:
static void init_socket_instance(lua_State* L, SOCKETH_T hSocket, int family, int type, int protocol) {
    if (hSocket == INVALID_SOCKET)
        luaL_error(L, "an error occured while creating socket");
   
    SocketInfo iSocket;
    ZeroMemory(&iSocket, sizeof(iSocket));
    iSocket.hSocket = hSocket;
    iSocket.family = family;
    iSocket.type = type;
    iSocket.protocol = protocol;

    lua_pushlightuserdata(L, &iSocket); // Push SocketInfo
    luaL_newmetatable(L, SOCKET_DATA_NAME); // Create new metatable for SocketInfo(socket_data)
    lua_getglobal(L, "socket"); // Get Global Socket Table(socket)
    lua_setfield(L, -2, "__index"); // socket_data.__index = socket
    lua_setmetatable(L, -2); // Set metatable of SocketInfo to socket_data
}

Свою задачу выполняет на отлично, но есть проблемка:

В другой функции check_socket_data(ниже), при получении этой структуры, данные в ней 'повреждаются', и вместо handler'а сокета, там рандомное число.
Возможно, поможет: Значения hSocket при одном из запусков(естественно, hSocket меняется)
hSocket при инициализации = 248
hSocket при получении в функции check_socket_data = 1975321384

C++:
static SocketInfo* check_socket_data(lua_State* L) {
    return (SocketInfo*)luaL_checkudata(L, 1, SOCKET_DATA_NAME);
}
Проблему решил самолично

Решение:
Выделять память malloc'ом
 
Последнее редактирование: