查找动态分配的无符号long long数组的长度

时间:2013-06-07 01:44:33

标签: c arrays

我有一组无符号长多数。我初始化前12个元素。该数组在整个程序运行时更改大小。如何找出数组的长度。

我不能使用sizeof(array)/ sizeof(unsigned long long),因为在这种情况下它无法正常工作。

我尝试使用这个循环:

count = 0;
while ( array[count] ) count++;
return count;

此方法的问题在于它仍然返回错误的长度。

以下是代码的基本概要。

unsigned long long *prime = (unsigned long long *)calloc(1000, sizeof(unsigned long long);
prime[0] = 3;
prime[1] = 5;
....
prime[11] = 41;
unsigned long long *ptrEmpty = &prime[12];
int sizeComp;

//User can change change the size of the array here to create a larger list of primes.//
for( i = 43, sizeComp = 12; sizeComp < length(prime); i += 2 ){
    // Do stuff...
} 

我怎样才能找到这个长度?

1 个答案:

答案 0 :(得分:5)

一种方法是每次将元素插入数组时都保留一个计数器。也许你可以将数组封装在一个结构中,例如:

typedef struct int_arr
{
    int* arr_ptr;
    size_t max_size;
    int curr_elem;
} int_arr;

然后,您可以指定initadd以及get_max_sizeget_curr_size函数。

初​​始化:

int_arr* arr_init(int_arr* ptr, size_t size)
{
    ptr = calloc(size, sizeof(int);
    ptr->max_size = size;
    ptr->curr_elem = 0;
    return ptr;
}

添加:

void add(int_arr* ptr, int value)
{
    if (ptr->curr_elem < ptr->max_size)
        ptr->arr_ptr[ptr->curr_elem++] = value;
    else
        printf("Max size reached!\n");
}

获取总大小:

size_t get_total_size(int_arr* ptr) { return ptr->max_size; }

获取当前大小:

int get_curr_size(int_arr* ptr) { return ptr->curr_elem; }

显然用您想要的类型替换int