Преобразование размещения / освобождения многомерных массивов из C ++ в C

0

У меня есть код C++...

// global
DWORD* P;
DWORD (*S)[256];

// then later allocate memory
P = new DWORD[18];
S = new DWORD[4][256];

// later on, free memory
delete P;
delete [] S;

что я хочу конвертировать в C. Я пробовал..

/* global */
DWORD* P;
DWORD (*S)[256];

/* allocate */
P = malloc(sizeof(DWORD[18]));
S = malloc(sizeof(DWORD[4][256]));

/* free */
free(P);
free(S);

Он работает, и я не получаю никаких ошибок или предупреждений от компилятора (GCC), но я не уверен, что это правильный путь, и я предполагаю, что он утечки памяти, возможно, в освобождении многомерного массива.

Кроме того, являются ли эти массивы слишком большими для размещения в стеке? Могу ли я сделать это так и забыть о malloc/free?

DWORD P[18] = {0};
DWORD S[4][256] = {{0}};
Теги:
arrays
multidimensional-array
malloc

1 ответ

1
Лучший ответ

Этот код абсолютно безопасен. malloc() и free() предназначены только для выделения количества байтов из кучи. Вот почему вы используете sizeof() внутри вызова для malloc(), чтобы определить количество байтов, которое требуется для типа данных. Вы также можете, например, сделать S = malloc(sizeof(DWORD) * 4 * 256) и получить тот же результат.

Чтобы ответить на вторую половину вопроса, ни один из этих массивов не близок к тому, чтобы быть слишком большим для стека. Вы можете складывать их в C или C++.

  • 0
    Я получил это сейчас, большое спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню