繁体   English   中英

C++ 分配内存

[英]C++ allocating memory

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

#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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM