动态分配数组中的某个值总是打印一个垃圾值
One of the values in a dynamically allocated array always prints a garbage value
为什么p[1].x打印为垃圾值?是否可以将动态分配的数组初始化为给定的数组?如果是,那么怎么做?
#include <ioStream>
using namespace std;
struct point{
int x;
int y;
};
int N;
point *p = new point[N];
int main(){
cin>>N;
for(int i=0; i<N; i++){
cin>>p[i].x>>p[i].y;
}
for(int i=0; i<N; i++){
cout<<"("<<p[i].x<<", "<<p[i].y<<")"<<endl;
}
}
在这两行中,您正在使用初始化为零的变量(N
)调整数组的大小。
int N;
point *p = new point[N];
因此,您将是一个长度为0
的数组的new
。一旦cin>>N
,这将导致问题,因为您使用该变量循环并写入数组,而数组将在分配的空间之外写入。
这些类型的情况确实需要std::array
或std::vector
。
您的代码具有未定义的行为,因为变量N在用于在堆中分配数组时没有用数组的潜在元素数初始化
int N;
point *p = new point[N];
这是一个全局变量,其静态存储持续时间由编译器分配为0。根据C++标准
当表达式的值为零时,分配函数为调用以分配一个没有元素的数组
至少像一样重写代码
#include <ioStream>
using namespace std;
struct point{
int x;
int y;
};
int main(){
int N;
cin>>N;
point *p = new point[N];
for(int i=0; i<N; i++){
cin>>p[i].x>>p[i].y;
}
for(int i=0; i<N; i++){
cout<<"("<<p[i].x<<", "<<p[i].y<<")"<<endl;
}
}
如果您知道最大点数,最好执行以下操作:
const int MAXN = 1000;
Point p[MAXN];
int N;
cin >> N;
// ...
您也可以手动分配空间,但应该先读取N。
cin >> N;
Point *p = new Point[N];
// ...
第三种选择是使用容器(动态数组为vector
)。
vector<Point> p;
cin >> N;
while(N--)
{ int x, y;
cin >> x >> y;
Point p_(x, y); // Assumes constructor exists
p.push_back(p_);
}
相关文章:
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 如何使用gdb制作一个可以漂亮地打印每个对象的C++函数
- 获取用C/C++打印的最后一个字符串
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 只有一个内环的打印图案
- 将值传递到另一个类函数在打印时为零
- 我用字符串做了一个C++构造函数,但它不会打印出字符串
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 打印对象的映射,其中另一个对象作为键
- 类函数返回到另一个类函数返回打印不同的值
- 如何打印下一个字母直到 Z 并继续到 A?
- 我在 C++ 中创建了一个函数来递归反转字符串,但是之后如何使功能打印一个 endl?
- c++:如何打印出一个强制转换的 int 值?
- 为什么在C++中增加指针后打印了一个值而不是 NULL/0?
- 我在C++中编写了一个方法来打印树类的预序,但它显示了分割错误
- 该程序没有产生输出,而是卡在一个循环中,几秒钟后消失并打印被杀死?
- 如何在循环中使用scanf,将值存储到一个变量中,然后打印出来?
- 如何在级别上打印树,给定一个结构,该结构保存节点的值及其父节点的值,对于树中的每个节点
- 需要使班级(long_number)用构造函数和一个打印功能代表1到60的任何长度