在不知道最终长度的情况下初始化动态矢量

时间:2014-01-15 22:09:30

标签: c arrays pointers

我试图做一个(可能)简单的事情。但我有一些配音。我想在C中初始化一个数组。但是我不知道在循环结束时我需要多少元素。所以我想以这种方式动态分配它:

int *segment;
int index=0;

for (i=0; i<height; i++) 
{
    for (j=0; j<width; j++) 
    {
         if ("some_condition_is_verified"){

             segment[index] = (int)calloc(1, sizeof(int));
             segment[index] = 5;  // 5 is only for example.
             index++;     
         }    
    }   
}

我相信这个声明并不好,因为它给了我这个错误:  warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] ,o我能做什么?这是错的吗? 感谢

2 个答案:

答案 0 :(得分:1)

这是错的吗?

segment[index]类型为int

像这样修复代码示例:

int *segment;
int index=0;

segment = calloc(height*width, sizeof(int));//ensure a maximum memory for vector.
for (i=0; i<height; i++){
    for (j=0; j<width; j++){
         if ("some_condition_is_verified"){
             segment[index++] = 5;  // 5 is only for example.
         }    
    }   
}
segment = realloc(segment, index*sizeof(int));//reduce the size,

答案 1 :(得分:0)

calloc不会返回int,而是指向intint *)的指针。

正确的代码是

 segment = (int *) calloc(1, sizeof(int));

从那里,您可以将指针用作数组(实质上,数组只是静态分配“指针”)。