三角形2-D阵列的动态内存分配

时间:2011-07-11 00:07:10

标签: c arrays pointers sizeof dynamic-memory-allocation

我想初始化一个二维数组,这样每行都有不同数量的元素。 更重要的是,行的元素数量取决于其前一行中的元素数量。 例如, 管理行中元素数量的函数是:

Rows(N)= 2*Rows(N-1) +1 

其中,Rows(N)是第N行中的单元格数。

如果我能找到数组的大小,问题就可以轻松解决。 例如, 我试过了:

int A[10];

那么它的大小是sizeof(A)/sizeof(int),它给了我10.(正确)

但如果我分配内存如:

int *A;
A=(int *)malloc(sizeof(int)*10);

然后检查sizeof(A)/sizeof(int)的值,它给了我1.(错误的) 所以,这种方法在这里不起作用。

任何人都可以帮我这个。

3 个答案:

答案 0 :(得分:3)

虽然您可以像C中的数组一样访问动态内存,但它具有不同的语义。当您要求sizeof(A)/sizeof(int)时,您实际上是在询问sizeof(int *)/sizeof(int)。由于这两个量相等(例如两个都是32位),答案是1

对于动态内存,“数组”的长度在编译时是未知的,因此您需要将其显式存储在单独的变量中。或者,您可以将内存及其长度作为单个变量包装在结构(或指向结构的指针)中。

答案 1 :(得分:0)

要么用循环计算数组中的元素。

或者给出

int *A; A=(int *)malloc(sizeof(int)*10);

看起来你已经知道了大小(10),所以当你构建数组的其余部分时,使用一个变量来跟踪下一行的元素数量。

答案 2 :(得分:0)

您的Aint*。数组实际上只是指向连续内存块的第一个元素的指针,没有关联的大小信息。这意味着sizeof(A)是单个元素的大小。

由于你已经拥有数组的大小,你的代码应该可以正常工作。