c++ - VC++ : Pass multiple arrays between functions

标签 c++ arrays visual-c++ pointers

我是 VC++ 的新手,我需要在函数之间传递 4 个数组,所以我使用另一个数组来存储它们的指针。我做对了吗?

unsigned int* step1(...) {

    ...

    // save data arrays
    unsigned int* savedData = new unsigned int[4];
    savedData[0] = *data0;
    savedData[1] = *data1;
    savedData[2] = *data2;
    savedData[3] = *data3;
    return savedData;
}

unsigned char* step2(unsigned int* savedData, ...) {

    // read data arrays
    unsigned int* data0 = &savedData[0]; 
    unsigned int* data1 = &savedData[1];
    unsigned int* data2 = &savedData[2]; 
    unsigned int* data3 = &savedData[3];

    ...

}

最佳答案

为了补全前面的有效答案,我会尽量扩充答案:

Have I done it correctly?

好吧,为了在函数之间传递数据:是的,使用指针是一种选择。但社区通常不鼓励这样做,因为它会给内存管理带来麻烦。

当您使用指向动态内存的指针时,您必须清楚地知道内存在哪里创建以及内存将被删除,换句话说:内存的生命周期必须清晰明了,并且因此,通常不鼓励在函数之间传递指针。

例如,在您的情况下:unsigned int* step1(...) 函数返回一个指针,但是看着它,新程序员或与您一起工作的人不会判断是否返回的指针是动态内存,如果调用 step1 必须 deletedelete [] 调用后的内存,同样适用于 unsigned char* step2(unsigned int* savedData, ...) 并且会更加困惑和麻烦,因为有人会问:step2 会改变传递的 savedData 吗?

为了解决step2问题,您可以将函数更改为:

unsigned char* step2(const unsigned int* const savedData, ...)

通过添加 const 你是在告诉:“嘿!step2 不会改变 savedData 的内容,也不会改变它指向的地址”。

但是前面所有的文字都是无用的,因为没有解决最重要的问题:释放内存的地方?

step1 中,您正在动态创建内存,在 step2 中,此内存被读取但是... delete 隐藏在某处在您不粘贴的代码中?或者有一个 step3 等待处理内存?

为了避免所有这些令人头疼的内存问题,通常建议使用 STL 容器,例如 std::vector,容器将为您负责内存管理,在您的情况下:

typedef std::vector<int> intvector;
typedef std::vector<intvector> intintvector;

void step1(intintvector &Data, ...) {
    ...
    // create data arrays
    intvector data0, data1, data2, data3;
    // fill data0, data1, data2, data3
    // ...
    // save data arrays.
    Data.push_back(data0);
    Data.push_back(data1);
    Data.push_back(data2);
    Data.push_back(data3);
}

void step2(const intintvector &savedData, ...) {

    // read data arrays
    intvector data0 = savedData[0]; 
    intvector data1 = savedData[1];
    intvector data2 = savedData[2]; 
    intvector data3 = savedData[3];
    // ...
}

简要总结:如果您不注意动态内存,您就没有正确使用指针部分,因此,您必须解决此问题或委托(delegate)给 STL 容器。

希望对您有所帮助! :D

关于c++ - VC++ : Pass multiple arrays between functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13062629/

相关文章:

c++ - gluTessCallback 指向回调函数的指针。编译错误

c++ - 如何判断输入的数字是否平衡?

c++ - C++ 中简单的 int 到 float 转换

arrays - 使用 strcpy() 在 C 中正确为指针赋值

c - char 数组初始值设定项中的多余元素

python - 获取列表中的最大重复项

visual-c++ - 从 MinGW 的 MSVC DLL 调用函数

c++ - dlib 示例,测试构建失败

c++ - 用于顺序处理的高效通用缓冲队列

c++ - (VC2010 express) 二维数组行为异常