#include <stdio.h>
#include <stdint.h> // В частности, для uint16_t.
int main(void) {
size_t nelem = 15;
// volatile не нужон.
uint16_t *testarray;
// Кастить результат malloc нужно в плюсах, в сишечке void *
// автоматически кастится в любой другой указатель.
// sizeof() лучше делать для дереференснутого указателя, а не
// для типа. Таким образом, если ты сменишь uint16_t на uint32_t,
// код не сломается.
testarray
= malloc(sizeof(*testarray
) * nelem
); if (!testarray) {
fprintf(stderr
, "malloc() failed\n"); }
// Как-то используем массив.
// Захотели изменить его размер. Объявляем другой указатель, потому что
// realloc() может сфейлиться и вернуть NULL. Если бы мы написали
// testarray = realloc(...), то в таком случае была бы утечка памяти.
uint16_t *temp;
size_t temp_size;
temp_size = nelem + 20; // Новая длина массива.
temp
= realloc(testarray
, sizeof(*testarray
) * temp_size
); if (!temp) {
fprintf(stderr
, "realloc() failed\n"); // Тут мы можем выйти или продолжить использовать testarray и nelem
// со старым размером.
} else {
testarray = temp;
nelem = temp_size;
}
// Используем массив дальше.
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4gLy8g0JIg0YfQsNGB0YLQvdC+0YHRgtC4LCDQtNC70Y8gdWludDE2X3QuCgppbnQgbWFpbih2b2lkKSB7CglzaXplX3QgbmVsZW0gPSAxNTsKCS8vIHZvbGF0aWxlINC90LUg0L3Rg9C20L7QvS4KCXVpbnQxNl90ICp0ZXN0YXJyYXk7CgkvLyDQmtCw0YHRgtC40YLRjCDRgNC10LfRg9C70YzRgtCw0YIgbWFsbG9jINC90YPQttC90L4g0LIg0L/Qu9GO0YHQsNGFLCDQsiDRgdC40YjQtdGH0LrQtSB2b2lkICoKCS8vINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INC60LDRgdGC0LjRgtGB0Y8g0LIg0LvRjtCx0L7QuSDQtNGA0YPQs9C+0Lkg0YPQutCw0LfQsNGC0LXQu9GMLgoJLy8gc2l6ZW9mKCkg0LvRg9GH0YjQtSDQtNC10LvQsNGC0Ywg0LTQu9GPINC00LXRgNC10YTQtdGA0LXQvdGB0L3Rg9GC0L7Qs9C+INGD0LrQsNC30LDRgtC10LvRjywg0LAg0L3QtQoJLy8g0LTQu9GPINGC0LjQv9CwLiDQotCw0LrQuNC8INC+0LHRgNCw0LfQvtC8LCDQtdGB0LvQuCDRgtGLINGB0LzQtdC90LjRiNGMIHVpbnQxNl90INC90LAgdWludDMyX3QsCgkvLyDQutC+0LQg0L3QtSDRgdC70L7QvNCw0LXRgtGB0Y8uCiAgICB0ZXN0YXJyYXkgPSBtYWxsb2Moc2l6ZW9mKCp0ZXN0YXJyYXkpICogbmVsZW0pOwogICAgaWYgKCF0ZXN0YXJyYXkpIHsKICAgIAlmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYygpIGZhaWxlZFxuIik7CiAgICAJZXhpdCgxKTsKICAgIH0KICAgIAogICAgLy8g0JrQsNC6LdGC0L4g0LjRgdC/0L7Qu9GM0LfRg9C10Lwg0LzQsNGB0YHQuNCyLgogICAgCiAgICAvLyDQl9Cw0YXQvtGC0LXQu9C4INC40LfQvNC10L3QuNGC0Ywg0LXQs9C+INGA0LDQt9C80LXRgC4g0J7QsdGK0Y/QstC70Y/QtdC8INC00YDRg9Cz0L7QuSDRg9C60LDQt9Cw0YLQtdC70YwsINC/0L7RgtC+0LzRgyDRh9GC0L4KICAgIC8vIHJlYWxsb2MoKSDQvNC+0LbQtdGCINGB0YTQtdC50LvQuNGC0YzRgdGPINC4INCy0LXRgNC90YPRgtGMIE5VTEwuINCV0YHQu9C4INCx0Ysg0LzRiyDQvdCw0L/QuNGB0LDQu9C4CiAgICAvLyB0ZXN0YXJyYXkgPSByZWFsbG9jKC4uLiksINGC0L4g0LIg0YLQsNC60L7QvCDRgdC70YPRh9Cw0LUg0LHRi9C70LAg0LHRiyDRg9GC0LXRh9C60LAg0L/QsNC80Y/RgtC4LgogICAgdWludDE2X3QgKnRlbXA7CiAgICBzaXplX3QgdGVtcF9zaXplOwogICAgCiAgICB0ZW1wX3NpemUgPSBuZWxlbSArIDIwOyAvLyDQndC+0LLQsNGPINC00LvQuNC90LAg0LzQsNGB0YHQuNCy0LAuCiAgICB0ZW1wID0gcmVhbGxvYyh0ZXN0YXJyYXksIHNpemVvZigqdGVzdGFycmF5KSAqIHRlbXBfc2l6ZSk7CiAgICBpZiAoIXRlbXApIHsKICAgIAlmcHJpbnRmKHN0ZGVyciwgInJlYWxsb2MoKSBmYWlsZWRcbiIpOwogICAgCS8vINCi0YPRgiDQvNGLINC80L7QttC10Lwg0LLRi9C50YLQuCDQuNC70Lgg0L/RgNC+0LTQvtC70LbQuNGC0Ywg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIHRlc3RhcnJheSDQuCBuZWxlbQogICAgCS8vINGB0L4g0YHRgtCw0YDRi9C8INGA0LDQt9C80LXRgNC+0LwuCiAgICB9IGVsc2UgewogICAgCXRlc3RhcnJheSA9IHRlbXA7CiAgICAJbmVsZW0gPSB0ZW1wX3NpemU7CiAgICB9CiAgICAKICAgIC8vINCY0YHQv9C+0LvRjNC30YPQtdC8INC80LDRgdGB0LjQsiDQtNCw0LvRjNGI0LUuCiAgICAKCXJldHVybiAwOwp9Cg==