C++分配内存

C++ allocating memory

本文关键字:内存 分配 C++      更新时间:2023-10-16

有人可以解释为什么当我返回表单函数时,我丢失了 tabOfOffset 的数据。我做了两次同样的事情,程序只在第二个数组上崩溃。我在函数末尾打印了这个数组的值,一切都清晰正确。也许我在删除的某个地方犯了错误?下面是代码。

#include<iostream>
#include <algorithm>
using std::cout;
using std::endl;
void changeSizeOfVector(int *tabValue, int *tabOffsets, int &oldSize, int 
newSize) {
int temp = std::min(oldSize, newSize);
int *newTabOfValues = new int [newSize] {0};
int *newTabOfOffsets = new int [newSize] {0};
for (int i = 0; i < temp; i++) {
    newTabOfValues[i] = tabValue[i];
    newTabOfOffsets[i] = tabOffsets[i];
}
delete[] tabValue;
delete[] tabOffsets;
tabValue = new int [newSize] {0};
tabOffsets = new int [newSize] {0};

for (int i = 0; i < newSize; i++) {
    tabValue[i] = newTabOfValues[i];
    tabOffsets[i] = newTabOfOffsets[i];
    std::cout << tabOffsets[i] << tabValue[i] << endl;
}
oldSize = newSize;
delete[] newTabOfValues;
delete[] newTabOfOffsets;
for (int i = 0; i < newSize; i++) {
    std::cout << tabOffsets[i] << tabValue[i] << endl;
}
}
int main() {
int SIZE = 10;
int * tabOfOffsets = new int[SIZE];
int * tabOfValues = new int[SIZE];
for (int i = 0; i < SIZE; i++)
{
    tabOfValues[i] = i;
    tabOfOffsets[i] = i;
    cout << tabOfValues[i] << " : " << tabOfOffsets[i] << endl;
}
changeSizeOfVector(tabOfValues, tabOfOffsets, SIZE, 12);

for (int i = 0; i < SIZE; i++) {
    cout << tabOfOffsets[i] << " : " << tabOfValues[i] << endl;
}
delete[] tabOfOffsets;
delete[] tabOfValues;

}

此函数声明是错误的:

void changeSizeOfVector(int *tabValue, int *tabOffsets, int &oldSize, int 
newSize);

这意味着您可以更改tabOffsets的值,但不能更改指针本身的值,以使其正常运行,您应该按如下方式声明它:

void changeSizeOfVector(int *tabValue, int **tabOffsets, int &oldSize, int 
newSize);

这样,您可以更改指针本身并为其分配新分配的数组。