Memset не заполняет весь массив указателей c ++ - PullRequest
1 голос
/ 12 октября 2019

У меня есть массив пикселей размером 1049088 на моем компьютере, и я хочу заполнить его полностью. Но когда я использую memset, он просто заполняется точкой массива, а не целым блоком.

Я перешел к http://www.cplusplus.com/reference/cstring/memset/ и ничего не говорит о максимальном размере. Кроме того, моя переменная - size_t (unsigned int), поэтому она должна выдать ошибку, если я поставлю более высокое значение, чем ожидалось, но оно находится в диапазоне.

memset((void*)pixels, BLACK_CLR, w_widthxheight);

Значение w_widthxheight - это size_t, который содержит 1049088. Пиксели - это массив COLORREF с размером той же переменной (w_widthxheight). Константа BLACK_CLR содержит 0.

Если есть какая-либо альтернатива memset, потому что я читал, что она где-то неэффективна (но отлично работает с первыми значениями x массива), это тоже будет хорошо.

1 Ответ

4 голосов
/ 12 октября 2019

Вы указываете размер в элементах, но memset ожидает, что размер будет в байтах. Так что это должно это исправить:

memset((void*)pixels, BLACK_CLR, w_widthxheight * sizeof( COLORREF ) );
...