我的程序中存在一些内存问题,所以我试图将mallocs转换为vector但是没有成功。
我目前拥有的代码:
midimhandle_t dimensions[3], *dimensions_new;
dimensions_new = (midimhandle_t *) malloc(sizeof(midimhandle_t) * 3);
free(dimensions_new);
不起作用的矢量替换:
midimhandle_t dimensions[3], *dimensions_new;
std::vector<midimhandle_t> dimensions_new(sizeof(midimhandle_t) * 3)
但是,当我尝试使用替换代码运行我的代码时,我收到以下错误
error: cannot convert ‘std::vector<midimension*>’ to ‘midimension**’
所以我的问题是: 矢量的创建是错误的还是我还需要考虑其他因素?
答案 0 :(得分:1)
我这样做:
std::array<midimhandle_t, 3> dimensions;
std::vector<midimhandle_t> dimensions_new(3);
第一个是固定大小的未初始化数组。它将其值直接存储在内部,因此如果它在堆栈上创建,则值也将是。
第二个是可调整大小的默认(值)初始化向量。它将其值存储在堆上。
答案 1 :(得分:0)
请替换此:
midimhandle_t dimensions[3], *dimensions_new;
std::vector<midimhandle_t> dimensions_new(sizeof(midimhandle_t) * 3);
简单地说:
midimhandle_t dimensions[3];
std::vector<midimhandle_t> dimensions_new(3);
答案 2 :(得分:0)
是的,你创建矢量的方法是错误的,你需要考虑其他因素。
假设您的原始C代码类似于
void some_function()
{
midimhandle_t *dimensions_new;
dimensions_new = (midimhandle_t *) malloc(sizeof(midimhandle_t) * 3);
// do something here
free(dimensions_new);
}
使用std::vector
的粗略等价物将是
void some_function()
{
std::vector<midimhandle_t> dimensions_new(3); // create vector with 3 elements
// do something here
// the vector will cease to exist as the function returns
}
要考虑的另一件事是std::vector
实际上是一个C ++(模板化)类,因此支持一组不同的操作(例如访问元素),而不是指向使用{{1}分配的数组的指针} - 这意味着,根据malloc()
表示的内容,您仍会遇到编译错误。您需要阅读// do something here
的文档,以了解如何有效地使用它。