Использование memset, подобного этому, поможет вам быстрее находить ошибки. Считайте это защитным (даже безопасным) стилем программирования.
Допустим, вы не использовали memset, а вместо этого пытаетесь усердно заполнить каждый элемент, как описано в API. Но если вы когда-нибудь забудете заполнить поле (или более позднее изменение API приведет к добавлению нового поля), то значение, которое поле принимает во время выполнения, не определено;и на практике будет использовать любую ранее сохраненную память.
Каковы последствия?
Если вам повезет, ваш код сразу же выйдет из строя приятным способом, который можно отладить, например, если для неустановленного поля требуется очень конкретное значение.
Если вам не повезло, вашкод все еще может работать, и он может работать годами. Возможно, в вашей текущей операционной системе программная память каким-то образом уже содержит правильное значение, ожидаемое API. Но когда вы перемещаете свой код между системами и компиляторами, ожидайте запутанного поведения: «он работает на моей машине, но я не понимаю, почему он не работает на вашей».
Так что в этом случае memset помогает вам избежать этого недетерминированного поведения.
Конечно, вы все равно можете профилировать свой код, проверять наличие неопределенной памяти, юнит-тесты и т. Д. Выполнение memset не являетсязамена для тех. Это просто еще один способ добраться до безопасного программного обеспечения.