我正在自学C ++,目前正在学习动态分配内存。这是我目前正在使用的代码:
#include <iostream>
using namespace std;
int *memAdd(int* dyn_Point, int *lenPoint){
int *new_Dyn_Point = new int[*lenPoint * 2];
*lenPoint = *lenPoint * 2;
for(int i = 0; i < *lenPoint; i++){
new_Dyn_Point[i] = dyn_Point[i];
}
delete lenPoint;
delete[] dyn_Point;
return new_Dyn_Point;
}
int main(){
int len = 2;
int *lenPoint = &len;
int current = 0;
int val;
int *dyn_Point = new int[len];
cout << "Input a value for point 1: ";
cin >> val;
dyn_Point[current] = val;
while(val > 0){
current++;
cout << "Input a value for point " << current+1 <<" (0 to exit): ";
cin >> val;
if(current+1 == len){
*dyn_Point = *memAdd(dyn_Point, lenPoint);
cout << len;
}
dyn_Point[current] = val;
}
for(int i = 0; i < len; i++){
cout << &dyn_Point[i] << "\n";
cout << dyn_Point[i] << "\n\n";
}
delete[] dyn_Point;
}
我的问题:当添加更多内存时,它必须增加一定值吗?
每当我开始使用我的&#34; len&#34;变量不是2我的程序会在我尝试分配更多内存或分配更多内存后立即崩溃,并且必须再次添加更多内存。
它应该是这样的,还是我在这里完全错过了什么?
答案 0 :(得分:0)
您的while循环需要break
while() {
//do your steps
break;
}
在功能memAdd
中需要进行以下更改:
// *lenPoint = *lenPoint * 2;
//需要对上面的行进行评论,否则会导致过流:
for(int i = 0; i < (*lenPoint-1); i++){
// for循环已更正以解决溢出
由于您没有分配内存,因此不需要删除 使用此变量
// delete lenPoint;
对于你的问题:当添加更多内存时,它必须增加一定值吗?
在这方面没有硬性和硬性的快速规则。的std ::矢量&lt;&GT;每当需要更多内存时,它的大小(内存分配)加倍。它与您的方法略有不同。在达到分配的上限之前,你的内存会翻倍。
**Edit**
编译完整代码作为OP请求
#include <iostream>
using namespace std;
int *memAdd(int* dyn_Point, int *lenPoint){
int *new_Dyn_Point = new int[*lenPoint * 2];
// *lenPoint = *lenPoint * 2;
for(int i = 0; i < (*lenPoint-1); i++){
new_Dyn_Point[i] = dyn_Point[i];
}
//delete lenPoint;
delete[] dyn_Point;
return new_Dyn_Point;
}
int main(){
int len = 2;
int *lenPoint = &len;
int current = 0;
int val;
int *dyn_Point = new int[len];
cout << "Input a value for point 1: ";
cin >> val;
dyn_Point[current] = val;
while(val > 0){
current++;
cout << "Input a value for point " << current+1 <<" (0 to exit): ";
cin >> val;
if(current+1 == len){
*dyn_Point = *memAdd(dyn_Point, lenPoint);
cout << len<<"\n";
}
dyn_Point[current] = val;
break;
}
for(int i = 0; i < len; i++){
cout << dyn_Point[i] << "\n";
cout << &dyn_Point[i] << "\n\n";
}
delete[] dyn_Point;
}
答案 1 :(得分:0)
&#34;我的问题:当添加更多内存时,它必须增加某个值吗?&#34;
当然,您必须使用这样的设计来管理内存分配。
特别是在重新分配内存以增加到必要数量时,你应该遵守Rule of Three (Five)并复制所有现有元素。
比自己做的更好的选择(可能容易出错),就是使用
std::vector<int> dyn_point;
和/或同类课程。
内存管理由container implementations处理,您不需要为此烦恼。