Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将指向数组的指针数组传递给将发生malloc()的函数_C++_Arrays_Function_Pointers_Malloc - Fatal编程技术网

C++ 将指向数组的指针数组传递给将发生malloc()的函数

C++ 将指向数组的指针数组传递给将发生malloc()的函数,c++,arrays,function,pointers,malloc,C++,Arrays,Function,Pointers,Malloc,我一直通过在函数外部运行malloc()来避免这种情况,但实际上函数知道数组需要多大,而外部不知道数组需要多大 我有:uint8_t*jpg[6],它是指向六个jpg压缩图像的六个指针,这些图像将被文件中读取的代码malloc-ed。换句话说,这是一个由六个指针组成的数组,指向六个大小不确定的数组 我一直在试图弄清楚如何将指向指针的指针传递到函数中,以便它能够使用已知大小的jpg数据对内存进行malloc() 我试过很多东西,但都没法编译 我最近的尝试是这样的,我不明白为什么它不起作用: 主要代

我一直通过在函数外部运行malloc()来避免这种情况,但实际上函数知道数组需要多大,而外部不知道数组需要多大

我有:uint8_t*jpg[6],它是指向六个jpg压缩图像的六个指针,这些图像将被文件中读取的代码malloc-ed。换句话说,这是一个由六个指针组成的数组,指向六个大小不确定的数组

我一直在试图弄清楚如何将指向指针的指针传递到函数中,以便它能够使用已知大小的jpg数据对内存进行malloc()

我试过很多东西,但都没法编译

我最近的尝试是这样的,我不明白为什么它不起作用:

主要代码:

...
uint8_t *jpg[6];
int size[6]; // returns the size of the images in bytes.
LoadJPG(&jpg, size);
...
功能:

LoadJPG(uint8_t ***jpg, int *size)
{
  ...
  *jpg = (uint8_t *) malloc(blahblahblah);
  ...
  memcpy(**jpg, *indata, blahblahblah);
  ...
}
指向函数调用和函数的错误点:

error: argument of type "uint8_t *(*)[6]" is incompatible with parameter of type "uint8_t ***"

<>我在C++中编译了GCC 4.94/p>< P>,它是不确定的行为,在没有创建对象的情况下写入Malc空间。你提到你在学习-一个好的学习方法是使用简单的,惯用的C++代码。 该程序可能看起来像:

#include <array>
#include <vector>

void LoadJPG( std::array<std::vector<uint8_t>, 6> &jpgs )
{
    jpgs[0].resize(12345);
    // use std::copy or memcpy to copy into &jpgs[0][0]

    jpgs[1].resize(23456);
    // etc.
}

int main()
{
    std::array<std::vector<uint8_t>, 6> jpgs;

    LoadJPG(jpgs);
}
#包括
#包括
void LoadJPG(标准::数组和jpgs)
{
jpgs[0]。调整大小(12345);
//使用std::copy或memcpy复制到&jpgs[0][0]
jpgs[1]。调整大小(23456);
//等等。
}
int main()
{
std::数组jpgs;
载荷jpg(jpgs);
}

对于那些像我一样迷惑的人,正确的方法是用C结构(如果你使用像CudaC这样过时的东西,不想把所有的永恒都转换成C++结构到C结构),那是很明显的,直到今天早上我才意识到这是很愚蠢的。 主要内容:

功能:

error: argument of type "uint8_t *(*)[6]" is incompatible with parameter of type "uint8_t ***"
void GetRawImagesFromCamera(uint8_t **jpg, int *size)
...
for (i=0; i < CAMERAS; i++)
{
  jpg[i] = (uint8_t *) malloc(size[i]);
  memcpy((void *) jpg[i], (void *) buff[i], size[i]);
  ...
}
...
void GetRawImagesFromCamera(uint8\u t**jpg,int*size)
...
对于(i=0;i

这是因为数组是通过指向第一个元素的指针传递的。我确信我需要传递一个指向指针的指针,但这正是传递数组时传递的内容。

1。了解指针和数组之间的区别。2.在C++中不要使用MALLC。3.不要在C++ 4中使用传递指针。(高级)完全不要使用原始指针或C样式数组谢谢您的帮助。我知道我使用的是混合C和C++。我在做有效的事情,因为我在学习。但我还是没有答案,太好了。多谢。