Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.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++算法获得未知大小的数据(它逐个检测图像上的粒子,在这个算法完成它的工作之前,我不知道会检测到多少粒子)。 所以,首先我想分配,比如说,包含10000个元素的数组,在处理过程中,如果必要的话,再分配10000个元素几次_C++_Arrays_Memory Management - Fatal编程技术网

为动态分配的阵列分配更多内存 < >我的C++算法获得未知大小的数据(它逐个检测图像上的粒子,在这个算法完成它的工作之前,我不知道会检测到多少粒子)。 所以,首先我想分配,比如说,包含10000个元素的数组,在处理过程中,如果必要的话,再分配10000个元素几次

为动态分配的阵列分配更多内存 < >我的C++算法获得未知大小的数据(它逐个检测图像上的粒子,在这个算法完成它的工作之前,我不知道会检测到多少粒子)。 所以,首先我想分配,比如说,包含10000个元素的数组,在处理过程中,如果必要的话,再分配10000个元素几次,c++,arrays,memory-management,C++,Arrays,Memory Management,以下是我尝试过的,它不起作用: #include <iostream> using namespace std; int main(){ int n = 3; int m = 3; float *a = new float[3]; a[0] = 0; a[1] = 1; a[2] = 2; float *b = a + 2; b = new float[3]; b[0] = 4; b[1] = 5;

以下是我尝试过的,它不起作用:

#include <iostream>
using namespace std;
int main(){
    int n = 3;
    int m = 3;
    float *a = new float[3];
    a[0] = 0;
    a[1] = 1;
    a[2] = 2;
    float *b = a + 2;
    b = new float[3];
    b[0] = 4;
    b[1] = 5;
    cout << a[3] << endl;
} 
#包括
使用名称空间std;
int main(){
int n=3;
int m=3;
浮动*a=新浮动[3];
a[0]=0;
a[1]=1;
a[2]=2;
浮动*b=a+2;
b=新浮动[3];
b[0]=4;
b[1]=5;

cout您应该使用
向量
,然后在必要时调整大小
,或者让它自行增长

当您这样做时:

float *b = a + 2;
b = new float[3];
即使您之前将指针设置为末尾的点,分配的内存也不会连续分配给第一次分配(无论如何都会被覆盖)。因此,当访问
a[3]
,您就不受约束了。

您应该只使用原始数组而不是原始数组。它的实现是为了高效增长。您可以使用更改其大小、附加或插入范围(或各种其他内容)来增长它


在C++中改变手动分配数组的大小是不可能的。使用“<代码> STD::vector < /代码>在原始数组上是一个好主意,即使大小没有改变。有些参数是自动的、防漏的内存管理、附加异常安全以及<代码>向量< /代码>知道它自己的大小。

< P>不,你。无法增加数组的大小。如果要使用数组,则必须分配一个足以容纳整个新数组的新块,并在删除旧数组之前复制现有元素。或者可以使用不连续存储其元素的更复杂的数据结构

幸运的是,标准库中有一些容器可以自动处理这个问题;其中包括
vector
,一个可调整大小的数组

std::vector<float> a(3);
a[0] = 0;
a[1] = 1;
a[2] = 2;

// you can resize it by specifying a new size
a.resize(4);
a[3] = 3;

// or by appending new elements
a.push_back(4);
std::向量a(3);
a[0]=0;
a[1]=1;
a[2]=2;
//可以通过指定新的大小来调整其大小
a、 调整大小(4);
a[3]=3;
//或者通过添加新元素
a、 推回(4);

你需要一个动态数组。C++给你<代码> STD::向量< /代码>为此你不必担心分配内存。谢谢!所以,向量类似乎是最容易的解决方案。