【问题标题】:Compiler displaying uninitialized temp variable [closed]编译器显示未初始化的临时变量
【发布时间】:2021-03-16 01:11:55
【问题描述】:

处理接收数组及其大小 (n) 并返回包含任何缺失整数的数组/更新大小参数的函数...我使用的数组是 {3, 1, 3, 0, 6, 4}, n = 6。我创建了一个临时数组以在各种索引处递增....因此,任何索引 = 0 都将等同于缺少的变量。我不断收到“使用未初始化的内存 'temp'”警告,屏幕上没有任何内容......您可以提供的任何帮助将不胜感激......

int* findMissing(int arr[], int n, int& resArrSize) {

    int* temp = new int[n + 1];
    int count = 0;
    for(int i = 0; i < n + 1; i++){
        temp[arr[i]]++;
    }
    int* missingInts = new int[n + 1];
    for (int i = 0; i < n + 1; i++) {
        if (temp[i] == 0) {
            missingInts[count] = temp[i];
            count++;
        }
    }
    delete[] temp;
    resArrSize = count;
    return missingInts;
}

【问题讨论】:

  • 这里增加:temp[arr[i]]++; 但数组中的值尚未初始化。声明 int* temp = new int[n + 1]; 没有将数组中的值设置为 0。
  • 这是使用std::vector&lt;int&gt; 存储您的temp 的一个很好的理由,它会正确地将成员初始化为零。

标签: c++ compiler-construction


【解决方案1】:

int* temp = new int[n + 1]; 没有初始化,也许你可以使用 memset 或其他 in

【讨论】:

    【解决方案2】:

    int* temp = new int[n + 1]; 声明创建了一个新数组,但没有初始化该数组的内容。

    temp[arr[i]]++; 被执行时,你会增加未初始化的arr[i] 的值,这就是导致编译器警告的原因。

    【讨论】:

      猜你喜欢
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      • 2021-04-22
      相关资源
      最近更新 更多