C++ C++;分配内存

C++ C++;分配内存,c++,memory-management,C++,Memory Management,有人能解释一下为什么当我返回表单函数时,我的数据从tabofoffset中丢失了吗。我做了两次同样的事情,程序只在第二个数组中崩溃。 我在函数末尾打印了这个数组的值,所有内容都清晰正确。也许我在删除的某个地方出错了? 下面是代码 #include<iostream> #include <algorithm> using std::cout; using std::endl; void changeSizeOfVector(int *tabValue, int *tab

有人能解释一下为什么当我返回表单函数时,我的数据从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;
#包括
#包括
使用std::cout;
使用std::endl;
void changeSizeOfVector(int*tabValue,int*taboffset,int&oldSize,int
新闻大小){
int temp=std::min(旧尺寸,新尺寸);
int*newTabOfValues=newint[newSize]{0};
int*newtaboffsets=newint[newSize]{0};
对于(int i=0;istd::cout此函数声明错误:

void changeSizeOfVector(int *tabValue, int *tabOffsets, int &oldSize, int 
newSize);
这意味着您可以更改
tabOffsets
的值,但不能更改指针本身,以使其正确运行。您应按如下方式声明它:

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

通过这种方式,您可以更改指针本身并为其分配一个新分配的数组。

获取一些,然后阅读有关引用以及如何通过引用传递参数的内容。不要使用指向数组的指针。这是C风格的编程。使用
std::vector
并通过引用传递。在了解引用之后,您将知道如何修复程序ram,然后想想你所做的双重复制。为什么不简单地分配指针呢?比如
tabValue=newabofvalues
?一旦你考虑、实现并测试了它,就把你的程序扔掉,学习如何使用。这可能是重复的,这确实回答了他的问题……但回避了他正在编程C风格的观点,虽然他可以使用STL之类的。谢谢。你让我开心了;)。顺便说一句,我知道我可以使用STL,但我有这个例子,我想知道为什么它不起作用。