C++ 程序输出内存地址,但仅在用作函数时

问题描述 投票:0回答:1
#include <iostream>
using namespace std;

int numericMenu();
void newGrade(int*, int);

int main() {
  int choice = 0;
  int* gradePtr = nullptr;
  int size = 0;
  int i = 0;
  gradePtr = new int[size];

  
  
  do {
    choice = numericMenu();
    if (choice == 1)
    {
      newGrade(gradePtr, size);
    }

  } while(choice != 2);
  
  return 0;
}

int numericMenu(){
  int choice = 0;
  cout << "1. Add Grade\n";
  cout << "2. Quit Program \n";
  cin >> choice;
  return choice;
}

void newGrade(int* gradePtr, int size){
  int *pTemp = nullptr;
   
  pTemp = new int[size];

  for (int i = 0; i <= size; i++)
    pTemp[i] = gradePtr[i];
  
  cout << "Enter score: ";
  cin >> pTemp[size];

  delete[] gradePtr;
  gradePtr = pTemp;
  pTemp = nullptr;

  for (int i = 0; i <= size; i++)
    cout << gradePtr[i] << endl;
  size++;
}

我正在做一项作业,制作一个分析测试成绩的程序。要求之一是创建我们自己的动态大小的数组。我们不允许使用标准模板库中的任何内容。

它应该只是允许用户输入存储在数组中的一堆数字,然后将这些数字打印出来。这段代码在 main 中运行良好。当我尝试将其变成一个函数时,它显示第一个分数,然后显示内存地址。

c++ arrays function pointers memory-management
1个回答
0
投票

代码中存在不同的问题。
1-

gradePtr = new int[size];
你不必分配它,直到它有大小
2-
for (int i = 0; i <= size; i++)
你只需旋转 size 次,所以它应该从 0 到 size-1
3-
void newGrade(int* gradePtr, int size)
您通过复制来传递这些参数,以便更新主函数中的版本,您必须使用引用运算符发送它们
void newGrade(int* & gradePtr, int & size)

© www.soinside.com 2019 - 2024. All rights reserved.