函数返回指针分配错误

时间:2014-04-10 04:35:56

标签: c++ c pointers

我正在尝试创建一个指向动态数组的指针,因此需要一个接受数组大小并返回指针的函数。但是,每次我这样做都会出错。函数本身没有错误,但分配确实没有。

有人可以指出可能出错的地方吗?我在线阅读了很多页面,但似乎无法弄清楚。这会有很大的帮助!

编辑:更新代码:

 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’

3 个答案:

答案 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);