将 malloc 更改为新的运算符
Changing malloc to new operator
我正在将路径规划代码从 C 更改为 C++。代码动态分配地图中的状态。 new
和malloc
的区别我不是很清楚。我收到以下代码片段的错误消息。
typedef struct cell
{
int x,y;
struct cell *n[5];
}cell_t;
typedef struct pq
{
cell_t **heap;
int len,cap;
}pq_t;
//for C version
func(pq_t *pq,50)
{
pq->heap = malloc(sizeof(cell)*50);
pq->len = 0;
pq->cap = 0;
}
//for C++ version
func(pq_t *pq,50)
{
pq->heap = (cell_t*)::operator new(sizeof(cell_t)*50);
pq->len = 0;
pq->cap = 0;
}
我得到的错误是:
cannot convert ‘cell_t
* {aka cell*
}’ to ‘cell_t**
{aka cell_s**
}’ in assignment
pq->heap =(cell_t*) ::operator new (sizeof(cell_t) * (50));""
我需要更改什么?
而不是这个:
pq->heap = (cell_t*)::operator new(sizeof(cell_t)*50);
你想要这个:
pq->heap = new cell_t[50];
也就是说,您发布的代码显然不是您的真实代码,因此其中可能还有其他错误。也许用编译的真实代码更新你的问题。
new 采用类型或类型数组,然后计算大小,即
cell_t* p = new cell_t // allocate one cell
cell_t* p = new cell_t[50] // allocate 50 cells.
不过我认为在程序中使用标准容器之一会更好,例如 std::vector
#include <vector>
..
std::vector<cell_t> myarray(50); // allocate 50 cell_t
那么您无需担心释放内存,std::vector 会为您处理。
我正在将路径规划代码从 C 更改为 C++。代码动态分配地图中的状态。 new
和malloc
的区别我不是很清楚。我收到以下代码片段的错误消息。
typedef struct cell
{
int x,y;
struct cell *n[5];
}cell_t;
typedef struct pq
{
cell_t **heap;
int len,cap;
}pq_t;
//for C version
func(pq_t *pq,50)
{
pq->heap = malloc(sizeof(cell)*50);
pq->len = 0;
pq->cap = 0;
}
//for C++ version
func(pq_t *pq,50)
{
pq->heap = (cell_t*)::operator new(sizeof(cell_t)*50);
pq->len = 0;
pq->cap = 0;
}
我得到的错误是:
cannot convert ‘
cell_t
* {akacell*
}’ to ‘cell_t**
{akacell_s**
}’ in assignmentpq->heap =(cell_t*) ::operator new (sizeof(cell_t) * (50));""
我需要更改什么?
而不是这个:
pq->heap = (cell_t*)::operator new(sizeof(cell_t)*50);
你想要这个:
pq->heap = new cell_t[50];
也就是说,您发布的代码显然不是您的真实代码,因此其中可能还有其他错误。也许用编译的真实代码更新你的问题。
new 采用类型或类型数组,然后计算大小,即
cell_t* p = new cell_t // allocate one cell
cell_t* p = new cell_t[50] // allocate 50 cells.
不过我认为在程序中使用标准容器之一会更好,例如 std::vector
#include <vector>
..
std::vector<cell_t> myarray(50); // allocate 50 cell_t
那么您无需担心释放内存,std::vector 会为您处理。