C++ 在C+中访问3D阵列+;
我有一个字符***,我动态地分配一些内存给它。然而,当我试图给它赋值时,我得到了分段错误。我用的尺码不是太大。当我创建char[768][1024][3]时,它可以工作,但当我使用相同的精确值动态添加它时,它不工作。以下是我的代码片段:C++ 在C+中访问3D阵列+;,c++,multidimensional-array,segmentation-fault,dynamic-memory-allocation,C++,Multidimensional Array,Segmentation Fault,Dynamic Memory Allocation,我有一个字符***,我动态地分配一些内存给它。然而,当我试图给它赋值时,我得到了分段错误。我用的尺码不是太大。当我创建char[768][1024][3]时,它可以工作,但当我使用相同的精确值动态添加它时,它不工作。以下是我的代码片段: pic = new char**[height]; for(int i = 0; i < height; i++) { pic[i] == new char*[width]; for(int j = 0; j
pic = new char**[height];
for(int i = 0; i < height; i++)
{
pic[i] == new char*[width];
for(int j = 0; j< width; j++)
{
pic[i][j] == new char[3];
}
}
pic[0][0][0] = 'a';//seg fault here
exit(1);
pic=新字符**[高度];
对于(int i=0;i
pic[i]==新字符*[width]代码>->为什么有一个=
比较而不是=
赋值
类似地,对于pic[i][j]==新字符[3]代码>->正在进行比较,没有赋值。简单地说:
pic = new char[height * width * 3];
访问pic[i][j][k]
使用:
pic[i * width + j * 3 + k]
@πάνταῥεῖ 哈哈,还没有。我必须克服这个分段错误,为什么不使用嵌套的std::vector
?使用起来简单得多。你知道=
和=
之间的区别吗?我假设任何打开了所有警告的编译器(总是应该这样)都会提到这一点。例如,Visual C++:警告C4553:“==”:运算符无效;您打算使用“=”吗?因为我们必须将给定的代码转换为线程。我们不能使用向量或任何其他东西。只需使用给定的代码并添加线程即可。我已经做了艰难的一点,但在这一点上卡住了,这应该是容易的!你可以很好地使用像std::vector
,std::thread
这样的东西来支持移动构造。啊,该死的,我怎么会错过它。无论如何谢谢:)