- 2,696
- 1,469
5@ будет заполняться числом, а не указателем("переполнения" не будет, участок из 4 байтов будет просто перезаписываться), а при чтении строки из чата, возможно, выйдет за границы этой переменной и переменные, которые больше 5, будут заполнены половинками текста.
При втором круге 5@, которая содержала до этого указатель на выделенную память, уже заполнена цифрой(не указателем), а при чтении и сканировании - уже не строка, а какое-то 4 байтовое число, оно даже сканироваться не будет.
Насчет "Нельзя будет очистить":
как я писал выше, в 5@ хранится какое-то число, а 0af9 очищает выделенную память. Тебе придется либо восстанавливать в 5@ указатель, либо не поступать так, используя одну переменную и для хранения строки, и для чтения кол-во параметров.
Куда противно объяснил, лучше не объясню.
При втором круге 5@, которая содержала до этого указатель на выделенную память, уже заполнена цифрой(не указателем), а при чтении и сканировании - уже не строка, а какое-то 4 байтовое число, оно даже сканироваться не будет.
Насчет "Нельзя будет очистить":
как я писал выше, в 5@ хранится какое-то число, а 0af9 очищает выделенную память. Тебе придется либо восстанавливать в 5@ указатель, либо не поступать так, используя одну переменную и для хранения строки, и для чтения кол-во параметров.
Код:
0ac8 0@
//5@ = указатель на буфер(после 0ac8). К примеру, 5@ = 0xCCFF0010
5@ = scan_string 5@
// 5@ = кол-во прочтенных параметров
free 5@ // очищается просто ничто, 4 байта переменной, которые были выделены для хранения только чисел(указатель = число), либо вообще ничего
Последнее редактирование: