C++ allocating arrays dynamically.

  • Context: Comp Sci 
  • Thread starter Thread starter Student100
  • Start date Start date
  • Tags Tags
    Arrays C++
Click For Summary
SUMMARY

The discussion focuses on dynamically allocating a class array in C++ using the 'new' operator, specifically within a loop that allows user input for questions and answers. The user successfully implements a method to expand the array size by creating a new array, copying existing elements, and deleting the old array. Concerns are raised about potential memory leaks due to dynamic memory allocation, but the user confirms that the 'delete[]' operator is correctly used to deallocate the previous array before reallocating memory for the new array.

PREREQUISITES
  • Understanding of C++ class structures and constructors
  • Knowledge of dynamic memory management in C++ using 'new' and 'delete'
  • Familiarity with pointers and array manipulation in C++
  • Basic debugging skills in Visual Studio 2010
NEXT STEPS
  • Study C++ dynamic memory allocation best practices
  • Learn about C++ smart pointers (e.g., std::unique_ptr, std::shared_ptr) for better memory management
  • Explore the use of C++ Standard Library containers, such as std::vector, for dynamic arrays
  • Investigate memory leak detection tools compatible with Visual Studio 2010
USEFUL FOR

C++ developers, computer science students, and anyone interested in dynamic memory management and array handling in C++.

Student100
Education Advisor
Messages
1,653
Reaction score
415

Homework Statement



The problem is to dynamically allocate (closer to relocating) a dynamic class array in C++ based on the number of user inputs. We can't use vectors, malloc, realloc, or any such functions beyond new or anything simple like asking the user for how many questions they want to input.

Homework Equations


None

The Attempt at a Solution



I've got it to where it will print out what I want to see, I'm not losing any information when I print out the array elements. My question is mostly to do with some confusion I have about what’s going on with the pointers during the relocating and repointing

...
Code:
	while (addQuestion == 1)
	{
		cout << "Please enter the question you would like to ask" << endl;
		cin >> userNewQuestion;
		cout << endl;
		cout << "please enter the anwser to the question you'd like to ask" << endl;
		cin >> userNewAnwser;
		cout << "Please enter the dollar amount you'd like the question to be worth" << endl;
		cin >> addDollarAmount;
		cout << "Enter another question? 1 for yes, 2 for no: ";
		cin >> addQuestion;
		cout << endl;

		Triva userNewTrivaQuestion(userNewQuestion, userNewAnwser, addDollarAmount);

		pntTriva myNewDynamicArray;
		myNewDynamicArray = new Triva[size+1];
		myNewDynamicArray[size] = userNewTrivaQuestion;
		copy(myDynamicTriva, myDynamicTriva+size, myNewDynamicArray);
		delete [] myDynamicTriva;
		size++;
		myDynamicTriva = myNewDynamicArray;

	}

I think it's behaving and starting with the original array, copying it into the temp MyNewDynamicArray that stores the new class member into the extra element, deletes the original dynamic allocation and points the original to the temp. However, I'm confused if when it runs a second time and goes through all the motions again if I'm leaving some dynamically allocated memory floating around somewhere that I shouldn't be? Is this the case, or does the delete make sure to take care of each old dynamical array like I think it should?

I'm using VS2010 ultimate, I'm not great with the debugger yet, the extent of my skill with it is to step through/in and add a watch. Beyond that I'm not exactly sure how to check dynamic allocations.
 
Last edited:
Physics news on Phys.org
It looks OK ...the delete[] deallocates the old copy, while the new one is dynamically allocated/deallocated inside the loop.
 
  • Like
Likes   Reactions: 1 person
UltrafastPED said:
It looks OK ...the delete[] deallocates the old copy, while the new one is dynamically allocated/deallocated inside the loop.

Thanks I appreciate the response, that's what I had thought was happening, but I still felt unsure about it.
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 6 ·
Replies
6
Views
3K
  • · Replies 7 ·
Replies
7
Views
2K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 6 ·
Replies
6
Views
6K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 6 ·
Replies
6
Views
4K