我正在尝试创建一个指向动态数组的指针,因此需要一个接受数组大小并返回指针的函数。但是,每次我这样做都会出错。函数本身没有错误,但分配确实没有。
有人可以指出可能出错的地方吗?我在线阅读了很多页面,但似乎无法弄清楚。这会有很大的帮助!
编辑:更新代码:
int *ReturnBitVector(int bitvector_size); //static
int *ReturnBitVector(int bitvector_size) //static
{
int *bitvector = malloc((bitvector_size*1024*8)*sizeof *bitvector);
return bitvector;
}
int* BV = (int*)ReturnBitVector;
if(BV == NULL){ //error here!
perror("error in allocating memory.\n");
}
我得到的错误:
join.c:71: error: expected identifier or ‘(’ before ‘if’
答案 0 :(得分:4)
首先,你取消引用指针,修正如下:
int* BV;
BV = ReturnBitVector(1024);
其次,您忘记在函数定义中指定参数类型。难道你不应该只复制粘贴上面2行的标题吗?
答案 1 :(得分:1)
int* BV;
BV = *ReturnBitVector(1024);
函数ReturnBitVector
返回类型int *
的值。您将取消引用此点,该值将计算为整数,然后将此整数值分配给类型为BV
的{{1}} - 另一种类型。编译器在分配它之前隐式地将整数类型转换为指针类型并发出警告 -
int *
您错过了函数定义中参数的类型。另外,不要强制转换join.c:69: warning: initialization makes pointer from integer without a cast
的结果。阅读本文 - Do I cast the result of malloc?我建议进行以下更改 -
malloc
答案 2 :(得分:0)
问题在于你的功能。它所采用的参数(bitvector_size)没有类型。试试这个:
int *ReturnBitVector(int bitvector_size) //static
{
int *bitvector;
//bitvector = new int[bitvector_size*1024*8];
bitvector = (int*) malloc(bitvector_size*1024*8);
return bitvector;
}
int* BV;
BV = *ReturnBitVector(1024);