В C нет способа узнать размер массива, на который ссылается указатель:
int a[25]; // Known size
int *b = a; // Unknown size
, поэтому sizeof()
просто печатает размер указателя, который составляет 4 байта на 32-битной платформе.
Если вам нужен размер, выделите структуру следующим образом:
struct Mem {
int size;
int a[1];
}
Используйте sizeof(struct Mem) + sizeof(int) * amount
, чтобы определить, сколько памяти выделить, назначьте ее указателю. Теперь вы можете использовать память с ptr->a[x]
.
Обратите внимание, что он выделит немного больше памяти, чем необходимо (обычно 4 байта), но этот подход работает с различными выравниваниями, размерами указателя и т. Д.