Это довольно простой вопрос, который по какой-то причине убеждает меня в правильном решении. Я имею дело с третьей стороной SDK, который декларирует следующую структуру:Как хранить данные в массивах переменной длины без повреждения памяти?
struct VstEvents
{
VstInt32 numEvents; ///< number of Events in array
VstIntPtr reserved; ///< zero (Reserved for future use)
VstEvent* events[2]; ///< event pointer array, variable size
};
Несмотря на то, что это «переменный размере» массив, он статический объявлен. Поэтому, очевидно, если я создаю объект VstEvents, задайте значение numEvents, а затем перейдите и начните добавлять их в массив, это приведет к повреждению памяти.
Так как же я должен правильно разбираться с такой структурой? Должен ли я выделить свой собственный массив VstEvent *, а затем указать на него события [0]?
В C нельзя отбрасывать возвращаемое значение из malloc(). Это может скрыть ошибку. – unwind 2008-12-11 12:19:57
Это верно только в C89. В C99 вы не можете использовать декларации неявных функций, поэтому не имеет значения, вы или нет. Кастинг делает код компилируемым под C++. – 2008-12-13 06:48:22