Другое С/С++ Вопрос - Ответ

Vadim.dll

Известный
168
81
не удается открыть источник файл "windows.h" SFPlugin
Вот такую ошибку выдает, что делать?
 

Vadim.dll

Известный
168
81
И еще вопросик, какой функцией можно изменить значение в памяти gta sa?
  • 0xB7CE50 - [dword] Деньги - Например
 

AWRage

Активный
642
141
Что за hook_handle_rpc_packet1 и hook_handle_rpc_packet2? Нашёл в собейте/ Это зачем? Ведь есть OnSendRPC, OnSendPacket и OnReceivePacket?
Так что, знает кто где в собейте устанавливается хук на game destructor?
 
Последнее редактирование:

Dimoz

Новичок
98
16
пытаюсь сделать динамическое выделение памяти для менюхи, как в собейте, но вылетает через 1-2 секунды после загрузки игры, если madd() вызывать
Код:
struct stMenuInfo
{
    const char *mname;
    struct stMenuInfo *pmenu;
    struct stMenuInfo *cmenu;
    unsigned int bcount;
    struct stButtonInfo *btn;
};

struct stMenuInfo* mdata;
unsigned int mcount = 0;

unsigned int madd(const char* mname)
{
    struct stMenuInfo *new_mn;
    memset(&new_mn, 0, 0);
    new_mn = (struct stMenuInfo *)realloc(mdata, (mcount + 1) * sizeof(struct stMenuInfo));

    if (new_mn == NULL)
        return NULL;

    mdata = new_mn;
    mdata[mcount].mname = _strdup(mname);
    mcount++;
    return mcount - 1;
}
помогите, пожалуйста
 

AWRage

Активный
642
141
Если я понял тебя правильно.
C++:
struct stMenuInfo
{
    const char *mname;
    struct stMenuInfo *pmenu;
    struct stMenuInfo *cmenu;
    unsigned int bcount;
    struct stButtonInfo *btn;
};

struct stMenuInfo* mdata;
unsigned int mcount = 0;

unsigned int madd(const char* mname)
{
    // Есть массив меню и их количество.
    // realloc - это функция, которая изменяет количество выделенной памяти
    // для нашего участка памяти (массива mdata)
    // и возвращает содержимое предыдущего участка, то есть наш массив с +1 элементом.
 
    // То есть, мы должны присвоить mdata её return,
    // а в аргументах указать участок для которого хотим выделить память
    // и количество выделенной памяти.

    // То есть, mdata и ++mcount (сразу добавляем 1 к mcount, важно чтобы ++ стояло перед переменной, загугли почему если не знаешь)
    // умножить на размер структуры.

    // Таким образом, у нас есть массив который содержит все те же элементы,
    // но у которого появился еще один элемент с "мусором".

    mdata = (struct stMenuInfo *)realloc(mdata, ++mcount * sizeof(struct stMenuInfo));

    // Очищаем "мусор".
    // Почему mcount - 1? Потому что у нас отсчет не с 1, а с 0 и последний элемент это всегда = количество_меню - 1.
    memset(&mdata[mcount - 1], 0, sizeof(struct stMenuInfo));
    mdata[mcount - 1].mname = _strdup(mname);
    return mcount - 1; // возвращаем id последнего меню?
}
 
Последнее редактирование:
  • Нравится
Реакции: Dimoz

Dimoz

Новичок
98
16
Если я понял тебя правильно.
C++:
struct stMenuInfo
{
    const char *mname;
    struct stMenuInfo *pmenu;
    struct stMenuInfo *cmenu;
    unsigned int bcount;
    struct stButtonInfo *btn;
};

struct stMenuInfo* mdata;
unsigned int mcount = 0;

unsigned int madd(const char* mname)
{
    // Есть массив меню и их количество.
    // realloc - это функция, которая изменяет количество выделенной памяти
    // для нашего участка памяти (массива mdata)
    // и возвращает содержимое предыдущего участка, то есть наш массив с +1 элементом.

    // То есть, мы должны присвоить mdata её return,
    // а в аргументах указать участок для которого хотим выделить память
    // и количество выделенной памяти.

    // То есть, mdata и ++mcount (сразу добавляем 1 к mcount, важно чтобы ++ стояло перед переменной, загугли почему если не знаешь)
    // умножить на размер структуры.

    // Таким образом, у нас есть массив который содержит все те же элементы,
    // но у которого появился еще один элемент с "мусором".

    mdata = (struct stMenuInfo *)realloc(mdata, ++mcount * sizeof(struct stMenuInfo));

    // Очищаем "мусор".
    // Почему mcount - 1? Потому что у нас отсчет не с 1, а с 0 и последний элемент это всегда = количество_меню - 1.
    memset(&mdata[mcount - 1], 0, sizeof(struct stMenuInfo));
    mdata[mcount - 1].mname = _strdup(mname);
    return mcount - 1; // возвращаем id последнего меню?
}
спасибо, надо учебники уже читать начать, уж больно интересны эти пляски с памятью


UPD:
чет рано обрадовался, игра-то вылетает все равно.
если убрать указатели на другие структуры из stMenuInfo, то все работает, но они нужны.
всё ещё в поисках помощи, посоны
 
Последнее редактирование:

AWRage

Активный
642
141
спасибо, надо учебники уже читать начать, уж больно интересны эти пляски с памятью


UPD:
чет рано обрадовался, игра-то вылетает все равно.
если убрать указатели на другие структуры из stMenuInfo, то все работает, но они нужны.
всё ещё в поисках помощи, посоны
А ты юзаешь их? Или что ты вообще хочешь сделать?