динамически зарервировать данные в fasm

Тема в разделе "WASM.BEGINNERS", создана пользователем e4key, 27 сен 2009.

  1. e4key

    e4key New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2009
    Сообщения:
    101
    botmen, почему? если верить msdn, то она ждет указатель на буфер, к которому будет присоединена строка.
     
  2. botmen

    botmen Member

    Публикаций:
    0
    Регистрация:
    2 сен 2007
    Сообщения:
    43
    LPTSTR lstrcat(

    LPTSTR lpString1, // address of buffer for concatenated strings
    LPCTSTR lpString2 // address of string to add to string1
    );
     
  3. botmen

    botmen Member

    Публикаций:
    0
    Регистрация:
    2 сен 2007
    Сообщения:
    43
    просто у меня-то выводит гооораздо больше
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    А в буфере, что должно быть ? Правильно, другая строка, заканчивающася нулем. А у тебя, что ? Мусор - вот и получай мусор :lol:
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    PS: мусор+hello
     
  6. e4key

    e4key New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2009
    Сообщения:
    101
    а откуда там мусор?) я собственно и хотел это узнать, т.к. я пробовал lstrcpy и все нормально.
     
  7. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Ты в описание HeapAlloc заглядывал ? Флаг HEAP_ZERO_MEMORY для чего нужен - чтобы занулить выделенный блок. Иначе в нем может содержаться любой мусор, т.к. винда попусту не тратит время на очистку блоков кучи, если ее об этом специально не попросить
     
  8. e4key

    e4key New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2009
    Сообщения:
    101
    точно, спасибо)
     
  9. InsidE

    InsidE Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    357
    Адрес:
    Over the hills and far away...
    e4key
    вы слышали про нулевой символ на коцне строки?по видимому не слышали :),вот сами подумайте как lstrcat должна узнать где конец строки?открою вам еще один секрет,чтобы узнать где конец строки в конце строки ставится ноль( не '0' а именно 0 ),и lstrcat считывает строку пока не найдет первый 0,а если у тебя его нету на конце строки,то lstrcat пойдет дальше,и скопирует все что после твоей строки,до первого 0.

    незнаю как проще написать,вобщем лучше почитайте книжек( юрова,рихтера,кнута... )
     
  10. botmen

    botmen Member

    Публикаций:
    0
    Регистрация:
    2 сен 2007
    Сообщения:
    43
    с lstrcpy у тебя скоро будет тоже непорядок по той же причине
     
  11. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Но в твоем случае не обязательно занулять весь блок - достаточно самому записать 0 в первый байт выделенного блока
     
  12. e4key

    e4key New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2009
    Сообщения:
    101
    про завершающий ноля я знаю =) просто я думал, что выделяя память heapalloc я получу неиспользованный пустой кусок памяти)
     
  13. botmen

    botmen Member

    Публикаций:
    0
    Регистрация:
    2 сен 2007
    Сообщения:
    43
    далее используй термин "обнулённый" :)
     
  14. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Написать менеджер памяти, который будет её выделять по типу как ядро при доступе к сторожевым страницам стека, только вверх http://files.virustech.org/indy/Code/MemMgn/