C++ C++;分配内存
有人能解释一下为什么当我返回表单函数时,我的数据从tabofoffset中丢失了吗。我做了两次同样的事情,程序只在第二个数组中崩溃。 我在函数末尾打印了这个数组的值,所有内容都清晰正确。也许我在删除的某个地方出错了? 下面是代码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
#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;i std::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,但我有这个例子,我想知道为什么它不起作用。