如何在c++中初始化指针数组
How to initialize a pointers array in c++
我使用valgrind来测试我的代码,并发现问题可能与我初始化指针数组的方式有关。但我不确定问题出在哪里。
错误如下:
Conditional jump or move depends on uninitialised value(s)
==7846== at 0x41065A: Scene::drawscene() const (scene.cpp:142)
==7846== by 0x4111C3: main (testscene.cpp:48)
==7846== Uninitialised value was created by a heap allocation
==7846== at 0x4C29F90: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7846== by 0x50C1829: operator new(unsigned long) (in /usr/lib/libc++abi.so.1.0)
==7846== by 0x40FBE8: Scene::copy(Scene const&) (scene.cpp:45)
==7846== by 0x40FB7C: Scene::Scene(Scene const&) (scene.cpp:22)
==7846== by 0x41108E: main (testscene.cpp:41)
==7846==
==7846== Conditional jump or move depends on uninitialised value(s)
==7846== at 0x4107AB: Scene::drawscene() const (scene.cpp:149)
==7846== by 0x4111C3: main (testscene.cpp:48)
==7846== Uninitialised value was created by a heap allocation
==7846== at 0x4C29F90: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7846== by 0x50C1829: operator new(unsigned long) (in /usr/lib/libc++abi.so.1.0)
==7846== by 0x40FBE8: Scene::copy(Scene const&) (scene.cpp:45)
==7846== by 0x40FB7C: Scene::Scene(Scene const&) (scene.cpp:22)
==7846== by 0x41108E: main (testscene.cpp:41)
数组的初始化方式如下:
Image** image;
int** sequence;
images = new Image*[max];
sequence = new int*[max];
在我看来,这没什么意义:
int** sequence;
sequence = new int*[max];
我在这里省略了images,因为这个整数指针数组表明了您的思维中可能存在的缺陷,这也反映在images数组中。
为什么要创建一个整型指针数组?在大多数硬件上,整数与指针的大小相同,那么它们指向的实际整数在哪里呢?
你是不是真的想说
int* sequence;
sequence = new int[max];
一个整数数组,现在可以实际存储数字?
也许这是同样的问题与你的图像数组,因为你正在形成一个数组的图像指针。现在,一个图像,不管它实际上是什么,可能确实更应该有一个指向图像的指针数组——这实际上是一个更常见的概念,而不是指向整数的指针数组。
那么,现在的问题是,如果你有一个图像指针数组,你指向的图像在哪里?过一段时间,你是否在做:
images[ n ] = new image;
或者类似的东西?这至少会把入口n指向一个图像。或者,您真的想创建一个图像数组吗?如上所述,我建议创建一个整数数组:
Image* image;
images = new Image[max];
我认为你要做的是初始化一个动态二维数组的int和类型的图像。下面是一个初始化序列变量的工作示例:
int** sequences = new int*[max];
for(int i = 0; i < max; ++i)
sequences [i] = new int[max];
这是假设你的2D数组是NxN。
2D数组就是指向指针数组的指针所以代码首先初始化指向指针数组的指针:
int** sequences = new int*[max];
但是现在你有了一个不指向任何地方的指针数组,所以你还必须初始化它们:
for(int i = 0; i < max; ++i)
sequences [i] = new int[max];
我将留给您为images变量做同样的事情。
相关文章:
- 分段错误 - 读取初始化指针的数组
- 初始化指针的常量向量
- 初始化指针或引用成员变量以指向另一个成员
- C++初始化指针/引用/复制细微差别
- 使用无效指针初始化指针声明符的行为是否未定义?
- 在一行中初始化指针(新uint8_t[高度*宽度*3])
- 如何使用可变模板初始化指针?
- 初始化指针时出现写入访问冲突
- C 错误,带有卷曲括号的字面初始化指针
- 重新初始化指针是一种不好的做法吗?
- 初始化指针?C
- 初始化指针向量的向量
- 如何在类函数中正确初始化指针
- C++初始化指针会使应用程序随机崩溃
- 初始化指针结构 - 内存中的外观
- 如何使用struct构造函数在结构中初始化指针阵列
- 在一行中声明并初始化指针到类实例
- 分配数组与初始化指针
- QT 中的非初始化指针
- 使用地址值初始化指针