将多维数组从C ++分配/解除分配转换为C.

时间:2013-10-18 20:38:18

标签: c++ c arrays multidimensional-array malloc

我有一个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}};

1 个答案:

答案 0 :(得分:1)

该代码非常安全。 malloc()free()仅关注从堆中分配多个字节。这就是您在sizeof()调用中使用malloc()来确定数据类型所需的字节数的原因。例如,您也可以执行S = malloc(sizeof(DWORD) * 4 * 256)并获得相同的结果。

要回答问题的后半部分,这些数组都不会对堆栈太大。您可以使用C或C ++进行堆栈分配。