【问题标题】:Initialize a struct's pointer in c++在 C++ 中初始化结构的指针
【发布时间】:2018-03-27 18:35:20
【问题描述】:

请帮助我理解我在这里做错了什么。

结构是

struct node
{
int value;
stack <int>losersStack;
};

主要是

int main()
{
    int size;
    printf("Enter size of arrary\n");
    scanf("%d", &size);
    node *arr = new node[size];
    for(int i=0; i<size; i++)
    {
        printf("Enter a value\n");
        scanf("%d", arr[i].value );
    }
}

输入值时出现错误。 “blabla 中 0x55e5effe (msvcr100d.dll) 处未处理的异常:0xC0000005:访问冲突写入位置 0xcdcdcdcd。”

提前致谢!

【问题讨论】:

  • 你为什么在 C++ 中使用scanf
  • scanf("%d", &amp;arr[i].value);
  • @Barmar 我更习惯它而不是 cout.. 这是问题的一部分吗?
  • 当你得到大小时,你似乎知道如何使用scanf(但为什么在C++中首先使用scanf?),但是你忘记了如何在循环中使用它?
  • 如果你比较习惯,那你应该知道需要给出变量的地址。

标签: c++ arrays pointers struct initialization


【解决方案1】:

你需要给出变量的地址:

scanf("%d", &arr[i].value);

但由于您是在编写 C++,所以使用cin 会更容易:

cin >> arr[i].value;

【讨论】:

    【解决方案2】:

    在您发布的代码中,您需要一个 & 符号 &amp; 之前 arr 表达式。

    scanf("%d", &arr[i].value );
    

    但不要使用所有低级的东西。特别要避免使用new。这里(减去对输入的错误检查)是 C++ 的方法。

    #include <iostream>
    #include <stack>
    #include <vector>
    struct node
    {
    int value;
    std::stack <int>losersStack;
    };
    
    int main()
    {
        std::cout <<  "Enter size of arrary\n";
        int size;
        std::cin >> size;
        std::vector<node> arr(size);
        for(int i=0; i<size; i++)
        {
            std::cout << "Enter a value\n";
            std::cin >> arr[i].value;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多