将空间分配给整数指针时出错

时间:2018-03-11 21:53:19

标签: c++ pointers

所以,我想创建一个让用户“声明”一个数组的函数,比如int_array(a,3);,这就是我的函数代码:

int int_array(int *p, int n)
{
   *p = (int*)malloc(n*sizeof(int));
   return *p;
}

问题是,我收到以下错误:

  

从'int *'无效转换为'int'。

我不知道为什么。实际上导致此错误的是什么?是因为'n'是一个简单的整数而不是指针吗?

2 个答案:

答案 0 :(得分:1)

问题是你的函数是取消引用一个没有指向有效int*的{​​{1}}指针,然后你试图将一个新分配的int数组分配给被解除引用的int。即使分配了int,也无法指定指向非指针变量的指针,这是您得到的错误。

请改为尝试:

int

int* int_array(int n)
{
    return (int*) malloc(n * sizeof(int));
}

但是,您不应该在C ++中使用int *a = int_array(3); ... free(a); ,而是使用malloc()

new[]

int* int_array(int n)
{
    return new int[n];
}

更好的选择是改为使用int *a = int_array(3); ... delete[] a;

std::unique_ptr

std::unique_ptr<int[]> int_array(int n)
{
    return std::make_unique<int[]>(n);
}

或者,只需删除此功能并改为使用std::unique_ptr<int[]> a = int_array(3); ...

std::vector

答案 1 :(得分:0)

问题:*p = (int*)malloc(n*sizeof(int));

*pint,您尝试为其分配int *。这不起作用(至少不是你试图这样做的方式)。

以下是修复:

int int_array(int *p, int n)
{
   p = (int*)malloc(n * sizeof(int));
   return *p;
}

但是,我担心这会导致内存泄漏,因为你在数组中分配的指针永远不会被释放。

解决方案是返回一个指针,或者更好(因为这应该是C ++),返回一个智能指针。

std::unique_ptr<int[]> int_array(std::unique_ptr<int[]> &p, int n)
{
   p = std::unique_ptr<int[]>(new int[n]);
   return p
}

为什么甚至打扰传递指针?只是做:

std::unique_ptr<int[]> int_array(int n)
{
   return std::unique_ptr<int[]>(new int[n]);
}