【发布时间】:2015-06-27 23:30:33
【问题描述】:
我正在自学 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;
}
我的问题:当添加更多内存时,它是否必须增加某个值?
每当我的“len”变量中的值不是 2 时,我的程序将在我尝试分配更多内存或在分配更多内存并且必须第二次添加更多内存之后崩溃。
这是应该的样子还是我在这里完全遗漏了什么?
【问题讨论】:
-
问题可能出在:while(val > 0){ current++;第一个 ++ 为当前提供 1,然后在 if 语句的检查中转到 current+1 以添加内存,因此只有当 len==2 时才添加内存。
-
你复制的数据是你应该复制的两倍。这可能会导致崩溃。
-
同样
delete lenPoint是错误的,因为它没有指向动态对象。 -
@NorbertvanNobelen 我不相信在那个领域会有问题。循环开始处的“current++”将其增加到 1,因为在循环开始之前填充了“dyn_Point[0]”。至于我的 if 语句中的“current+1”,这是我试图解决问题时遗留下来的,但对我所做的任何更改都没有实际影响
-
@MikeSeymour 我在哪里复制了我应该复制的两倍的数据,你能更清楚一点吗?此外,由于我对指针和动态对象还很陌生,所以我对删除东西有点过分热情,感谢您指出这一点。
标签: c++ memory dynamic-arrays dynamic-allocation