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的价值没有被正确分配,即使它没有给出