c++ - 动态分配数组中的一个值总是打印垃圾值

标签 c++ arrays dynamic-memory-allocation garbage

为什么 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 的数组。一旦您使用 cin>>N,这将导致问题,因为您使用该变量循环并写入数组,这将在分配的空间之外写入。

这些类型的情况确实需要 std::arraystd::vector

关于c++ - 动态分配数组中的一个值总是打印垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26220390/

相关文章:

ios - 使用 Swift 从数组中创建一个用换行符 (\n) 分隔的字符串

C 数组错误 - 要求我声明同一个变量两次

C++ 生成警告 : dereferencing type-punned pointer will break strict-aliasing rules

javascript - 获取键值对的嵌套对象数

c++ - 这是使用 void* 成员指针的正确方法吗?

c++ - 动态分配将数据存储在堆中的随机位置?

arrays - 用于存储大数据的动态数据结构数组

c - 输入的动态内存分配?

c++ - 两次重载运算符

android - 在 C/C++ 中更改 Android 上的 native 线程优先级