Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 函数返回指针分配错误_C++_C_Pointers - Fatal编程技术网

C++ 函数返回指针分配错误

C++ 函数返回指针分配错误,c++,c,pointers,C++,C,Pointers,我试图创建一个指向动态数组的指针,因此需要一个函数,该函数接受数组的大小并返回指针。然而,每次我都会出错。函数本身没有错误,但分配有错误 有人能指出可能出了什么问题吗?我在网上读了很多页,但似乎还是不明白。这将非常有帮助 编辑:更新代码: int *ReturnBitVector(int bitvector_size); //static int *ReturnBitVector(int bitvector_size) //static { int *bitvector = mall

我试图创建一个指向动态数组的指针,因此需要一个函数,该函数接受数组的大小并返回指针。然而,每次我都会出错。函数本身没有错误,但分配有错误

有人能指出可能出了什么问题吗?我在网上读了很多页,但似乎还是不明白。这将非常有帮助

编辑:更新代码:

 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’

首先,您取消了对指针的引用,更正如下:

int*BV;
BV=返回位向量(1024)


其次,您忘记在函数定义中指定参数类型。您不应该复制粘贴标题并将其粘贴到上面的两行吗?

首先,您取消了指针的引用,更正如下:

int* BV;
BV = *ReturnBitVector(1024);
int*BV;
BV=返回位向量(1024)

其次,您忘记在函数定义中指定参数类型。你不应该把标题复制粘贴到上面两行吗

int* BV;
BV = *ReturnBitVector(1024);
函数
ReturnBitVector
返回类型为
int*
的值。您正在解引用该点,该点的计算结果为一个整数,然后将该整数值赋给类型为
int*
-不同类型的
BV
。编译器在赋值前将整数类型隐式转换为指针类型,并发出警告-

join.c:69: warning: initialization makes pointer from integer without a cast
函数定义中缺少参数的类型。另外,不要强制转换
malloc
的结果。阅读本文-我建议进行以下更改-

// function declaration
int *ReturnBitVector(int bitvector_size);

// function definition
int *ReturnBitVector(int bitvector_size) 
{
   int *bitvector = malloc((bitvector_size*1024) * sizeof *bitvector);
   return bitvector;
}

// call the function

int *BV = ReturnBitVector(1024);
// check for NULL
if(BV == NULL) {
    perror("error in allocating memory.\n");
    // handle it
}

// do stuff with BV

free(BV);
BV = NULL;
函数
ReturnBitVector
返回类型为
int*
的值。您正在解引用该点,该点的计算结果为一个整数,然后将该整数值赋给类型为
int*
-不同类型的
BV
。编译器在赋值前将整数类型隐式转换为指针类型,并发出警告-

join.c:69: warning: initialization makes pointer from integer without a cast
函数定义中缺少参数的类型。另外,不要强制转换
malloc
的结果。阅读本文-我建议进行以下更改-

// function declaration
int *ReturnBitVector(int bitvector_size);

// function definition
int *ReturnBitVector(int bitvector_size) 
{
   int *bitvector = malloc((bitvector_size*1024) * sizeof *bitvector);
   return bitvector;
}

// call the function

int *BV = ReturnBitVector(1024);
// check for NULL
if(BV == NULL) {
    perror("error in allocating memory.\n");
    // handle it
}

// do stuff with BV

free(BV);
BV = NULL;

问题在于你的功能。它所采用的参数(位向量大小)没有类型。试着这样做:

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

问题在于你的功能。它所采用的参数(位向量大小)没有类型。试着这样做:

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


比较您要分配的类型和分配的值。这甚至不会编译。无论如何,在现代编译器上是不行的。@student001为什么要将
位向量_size
乘以
1024*8
?这就是我的动态数组要采用的大小。@student001数组的大小是数组中的元素数。因此,如果调用
ReturnVector(1024)
,这将动态分配
1024*1024
元素的数组。你确定要这样做吗?比较你要分配的类型和分配的值。这甚至不会编译。无论如何,在现代编译器上是不行的。@student001为什么要将
位向量_size
乘以
1024*8
?这就是我的动态数组要采用的大小。@student001数组的大小是数组中的元素数。因此,如果调用
ReturnVector(1024)
,这将动态分配
1024*1024
元素的数组。你确定你想要吗?嗨。当我遵循您的建议时,会出现不同的错误:join.c:70:error:conflicationtypefor-BV™ join.c:69:error:previous声明的-BV™ was here join.c:70:警告:初始化从指针生成整数,而不使用强制转换联接。c:70:错误:初始化器元素不在我的答案的第二段中。函数ReturnBitVector()的定义与声明不同。您忘记指定输入为int。编译器认为您正在尝试重新定义该函数。我已更改它,但它仍然存在。谢谢好吧,你改变了那些台词,但是你把它们改错了。您当前拥有的,
int*BV=(int*)ReturnBitVector
尝试将
ReturnBitVector
转换为指向
int
的指针。那不是你想要的;您希望调用函数,而不是将函数指针强制转换为整数指针。只需使用:
int*BV=ReturnBitVector(1024)你好。当我遵循您的建议时,会出现不同的错误:join.c:70:error:conflicationtypefor-BV™ join.c:69:error:previous声明的-BV™ was here join.c:70:警告:初始化从指针生成整数,而不使用强制转换联接。c:70:错误:初始化器元素不在我的答案的第二段中。函数ReturnBitVector()的定义与声明不同。您忘记指定输入为int。编译器认为您正在尝试重新定义该函数。我已更改它,但它仍然存在。谢谢好吧,你改变了那些台词,但是你把它们改错了。您当前拥有的,
int*BV=(int*)ReturnBitVector
尝试将
ReturnBitVector
转换为指向
int
的指针。那不是你想要的;您希望调用函数,而不是将函数指针强制转换为整数指针。只需使用:
int*BV=ReturnBitVector(1024)你好。我得到以下错误。我认为我的编译器是C,我得到的错误是:join.C:65:警告:从不兼容的指针类型join初始化。C:68:错误:预期的标识符或™ 在“如果”之前™我认为BV的值没有被正确分配,即使它没有给出更多的错误。您好。我得到了以下错误。我认为我的编译器是C,我得到的错误是:join.C:65:警告:从不兼容的指针类型join初始化。C:68:错误:预期标识符或€(错误)™ 在“如果”之前™我认为BV的价值没有被正确分配,即使它没有给出