473,480 Members | 2,164 Online
Bytes | Software Development & Data Engineering Community
Create Post

Home Posts Topics Members FAQ

3D vector memory deallocation

vector<vector<vector<long Vector3D; // 3dvector.

for (long k = 0; j < Depth; j++ )
{
Vector3D.push_back ( vector<vector<A_Type() );
for (long j = 0; j < Height; j++ )
{
Vector3D[k].push_back ( vector<A_Type>() );
for ( long i = 0; i < Width; i++ )
{
Vector3D[k][j].push_back ( i );
}
}
}

Vector3D.clear();
//memory deallocation

The program is crashed at run time.

?I have few questions.

What may be the reason behind crash?
Is Vector3D.clear() is sufficient to deallocate memory in all
dimention?
Is there any better way to deallocate the memory?
Do we need to deallocate memory in a vector?

Nov 11 '06 #1
6 2340
madhu wrote:
vector<vector<vector<long Vector3D; // 3dvector.

for (long k = 0; j < Depth; j++ )
{
Vector3D.push_back ( vector<vector<A_Type() );
for (long j = 0; j < Height; j++ )
{
Vector3D[k].push_back ( vector<A_Type>() );
for ( long i = 0; i < Width; i++ )
{
Vector3D[k][j].push_back ( i );
}
}
}

Vector3D.clear();
//memory deallocation

The program is crashed at run time.

?I have few questions.

What may be the reason behind crash?
Is Vector3D.clear() is sufficient to deallocate memory in all
dimention?
Is there any better way to deallocate the memory?
Do we need to deallocate memory in a vector?
Please post a complete compilable program that exhibits your problem.
You're almost there.

Nov 11 '06 #2

"madhu" <ma*******@gmail.comwrote in message
news:11**********************@h48g2000cwc.googlegr oups.com...
: vector<vector<vector<long Vector3D; // 3dvector.
:
: for (long k = 0; j < Depth; j++ )
Hmm, shouldn't j be replaced with k above ?
This error may well be causing an infinite loop.

: {
: Vector3D.push_back ( vector<vector<A_Type() );
: for (long j = 0; j < Height; j++ )
: {
: Vector3D[k].push_back ( vector<A_Type>() );
: for ( long i = 0; i < Width; i++ )
: {
: Vector3D[k][j].push_back ( i );
: }
: }
: }
:
: Vector3D.clear();
: //memory deallocation
:
: The program is crashed at run time.
Other than the problem reported above, I think this
code snippet would run ok.

Yet the code seems unnecessarily complex and slow.
The following would initialize the same contents as
above:

vector<A_Typeleaf( Width );
for( long i = 0 ; i < Width ; ++i ) leaf[i]=i;
vector<vector<vector<long >
Vector3D( Depth, vector<vector<long( Height, leaf );
Repeated calls to push_back are slow in comparison to
a single allocation/initialization of a vector.
: ?I have few questions.
:
: What may be the reason behind crash?
I don't see a reason for a "crash", except for the infinite
recursion which would cause memory exhaustion.

: Is Vector3D.clear() is sufficient to deallocate memory in all
: dimention?
Yes (or maybe not quite). The single memory segment allocated
by the instance itself will remain allocated (i.e.
Depth*sizeof(vector), probably Depth*12 bytes on a 32-bit platform).
It will be released when the variable gets out of scope.

: Is there any better way to deallocate the memory?
No.

: Do we need to deallocate memory in a vector?
You don't need to do it explicitly.
When a vector variable goes out of scope, all the memory
it has allocated will automatically be released.
Ivan
--
http://ivan.vecerina.com/contact/?subject=NG_POST <- email contact form

Nov 11 '06 #3

Ivan Vecerina wrote:
"madhu" <ma*******@gmail.comwrote in message
news:11**********************@h48g2000cwc.googlegr oups.com...
: vector<vector<vector<long Vector3D; // 3dvector.
:
: for (long k = 0; j < Depth; j++ )
Hmm, shouldn't j be replaced with k above ?
This error may well be causing an infinite loop.

: {
: Vector3D.push_back ( vector<vector<A_Type() );
: for (long j = 0; j < Height; j++ )
: {
: Vector3D[k].push_back ( vector<A_Type>() );
: for ( long i = 0; i < Width; i++ )
: {
: Vector3D[k][j].push_back ( i );
: }
: }
: }
:
: Vector3D.clear();
: //memory deallocation
:
: The program is crashed at run time.
Other than the problem reported above, I think this
code snippet would run ok.

Yet the code seems unnecessarily complex and slow.
The following would initialize the same contents as
above:

vector<A_Typeleaf( Width );
for( long i = 0 ; i < Width ; ++i ) leaf[i]=i;
vector<vector<vector<long >
Vector3D( Depth, vector<vector<long( Height, leaf );
Repeated calls to push_back are slow in comparison to
a single allocation/initialization of a vector.
: ?I have few questions.
:
: What may be the reason behind crash?
I don't see a reason for a "crash", except for the infinite
recursion which would cause memory exhaustion.

: Is Vector3D.clear() is sufficient to deallocate memory in all
: dimention?
Yes (or maybe not quite). The single memory segment allocated
by the instance itself will remain allocated (i.e.
Depth*sizeof(vector), probably Depth*12 bytes on a 32-bit platform).
It will be released when the variable gets out of scope.

: Is there any better way to deallocate the memory?
No.

: Do we need to deallocate memory in a vector?
You don't need to do it explicitly.
When a vector variable goes out of scope, all the memory
it has allocated will automatically be released.
Ivan
--
http://ivan.vecerina.com/contact/?subject=NG_POST <- email contact form


But if we want to deallocate the memory explicitly, what should we do
for it so that the single memory segment allocated.

Thanks for all.

Nov 11 '06 #4
"madhu" <ma*******@gmail.comwrote in message
news:11**********************@m7g2000cwm.googlegro ups.com...
: : vector<vector<vector<long Vector3D; // 3dvector.
....
: : Is Vector3D.clear() is sufficient to deallocate memory in all
: : dimention?
: Yes (or maybe not quite). The single memory segment allocated
: by the instance itself will remain allocated (i.e.
: Depth*sizeof(vector), probably Depth*12 bytes on a 32-bit platform).
: It will be released when the variable gets out of scope.
....
: : Do we need to deallocate memory in a vector?
: You don't need to do it explicitly.
: When a vector variable goes out of scope, all the memory
: it has allocated will automatically be released.
:
: But if we want to deallocate the memory explicitly, what should
: we do for it so that the single memory segment allocated.

Not sure I understand your question correctly.
But if you want to deallocate the memory block allocated
by the "root" vector of the program you posted, the
following trick will typically work (although it is
not formally guaranteed to do so):

vector<vector<vector<long >().swap( Vector3D );

This swaps the memory blocks allocated by a new and empty
temporary instance with that of Vector3D. The temporary
is the destroyed and releases all the memory previously
owned by Vector3D.

--
http://ivan.vecerina.com/contact/?subject=NG_POST <- email contact form

Nov 11 '06 #5

madhu wrote in message
<11**********************@h48g2000cwc.googlegroups .com>...
>vector<vector<vector<long Vector3D; // 3dvector.
for (long k = 0; j < Depth; j++ ){
Vector3D.push_back ( vector<vector<A_Type() );
for (long j = 0; j < Height; j++ ){
Vector3D[k].push_back ( vector<A_Type>() );
for ( long i = 0; i < Width; i++ ){
Vector3D[k][j].push_back ( i );
}
}
}
Vector3D.clear(); //memory deallocation

The program is crashed at run time.
?I have few questions.
Since they were answered, I'll give you a tip.

// tip 1
#include <iostream>
#include <ostream>
#include <vector>
#include <stdexcept>

{
vector<vector<vector<long Vector3D; // 3dvector.

try{
for (long k = 0; k < Depth; ++k ){
Vector3D.push_back ( vector<vector<A_Type() );
for (long j = 0; j < Height; ++j ){
Vector3D.at( k ).push_back ( vector<A_Type>() );
for ( long i = 0; i < Width; ++i ){
Vector3D.at( k ).at( j ).push_back ( i );
} // for(i)
} // for(j)
} // for(k)
} // try
catch( std::out_of_range &Oor ){
std::cout<<"caught "<<Oor.what()<<std::endl;
}
}
// ------------
Now if an index is out of range, you'll see it.
// First for(k) loop index error ( j != k ) fixed.
// tip 2
{
typedef std::vector<std::vector<std::vector<int vec3d;
// instance: 3x3x3 all init'ed to 7.
vec3d vec3D(3, std::vector<std::vector<int(3, std::vector<int>(3,
int(7))));

for(size_t x(0); x < vec3D.size(); ++x){
for(size_t y(0); y < vec3D.at(x).size(); ++y){
for(size_t z(0); z < vec3D.at(x).at(y).size(); ++z){
std::cout<<" vec3D.at("<<x<<").at("<<y<<").at("<<z<<")= "
<<vec3D.at(x).at(y).at(z)<<" // before"<<std::endl;
vec3D.at(x).at(y).at(z) = z;
std::cout<<" vec3D.at("<<x<<").at("<<y<<").at("<<z<<")= "
<<vec3D.at(x).at(y).at(z)<<" // after"<<std::endl;
} // for(z)
} // for(y)
std::cout<<std::endl;
} // for(x)
std::cout<<std::endl;
}
// ------------

--
Bob R
POVrookie
Nov 11 '06 #6
Well Ivan Thanks 4 ur help. Yourr suggetion was helpful to us.

Madhukar Arvind

Ivan Vecerina wrote:
"madhu" <ma*******@gmail.comwrote in message
news:11**********************@h48g2000cwc.googlegr oups.com...
: vector<vector<vector<long Vector3D; // 3dvector.
:
: for (long k = 0; j < Depth; j++ )
Hmm, shouldn't j be replaced with k above ?
This error may well be causing an infinite loop.

: {
: Vector3D.push_back ( vector<vector<A_Type() );
: for (long j = 0; j < Height; j++ )
: {
: Vector3D[k].push_back ( vector<A_Type>() );
: for ( long i = 0; i < Width; i++ )
: {
: Vector3D[k][j].push_back ( i );
: }
: }
: }
:
: Vector3D.clear();
: //memory deallocation
:
: The program is crashed at run time.
Other than the problem reported above, I think this
code snippet would run ok.

Yet the code seems unnecessarily complex and slow.
The following would initialize the same contents as
above:

vector<A_Typeleaf( Width );
for( long i = 0 ; i < Width ; ++i ) leaf[i]=i;
vector<vector<vector<long >
Vector3D( Depth, vector<vector<long( Height, leaf );
Repeated calls to push_back are slow in comparison to
a single allocation/initialization of a vector.
: ?I have few questions.
:
: What may be the reason behind crash?
I don't see a reason for a "crash", except for the infinite
recursion which would cause memory exhaustion.

: Is Vector3D.clear() is sufficient to deallocate memory in all
: dimention?
Yes (or maybe not quite). The single memory segment allocated
by the instance itself will remain allocated (i.e.
Depth*sizeof(vector), probably Depth*12 bytes on a 32-bit platform).
It will be released when the variable gets out of scope.

: Is there any better way to deallocate the memory?
No.

: Do we need to deallocate memory in a vector?
You don't need to do it explicitly.
When a vector variable goes out of scope, all the memory
it has allocated will automatically be released.
Ivan
--
http://ivan.vecerina.com/contact/?subject=NG_POST <- email contact form
Nov 13 '06 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
2291
by: Tino | last post by:
I have a std::vector<int> which, after some initialization, has a fixed number of elements...after initialization I must do the following repeatedly: I remove an element which could be anywhere in...
4
1668
by: John | last post by:
Hi all: I write the following code about vector and list. Why the result is not correct? Thanks. John --------------------------------------------------------------
11
2626
by: aaaaa | last post by:
Hi all, Does anybody know if STLPort or SGI STL standard allocators do memory pooling for the list, map and set? Also I have had a look at the BOOST pool_alloc (to be used as a pooling...
7
2397
by: Andy Chang | last post by:
Hi, If I have typedef struct { std::vector <float> vSomeVal; int i; } VEC_T; Then is VEC_T * ptr a valid pointer to the struct accessing the vector? Also do I need to explicitly...
5
2315
by: christophe (dot) poucet (at) gmail (dot) com | last post by:
Hello, I noticed there is a flaw in the vector implementation of g++ (3.4). Basically when you erase an element from a vector, it calls the wrong destructor. In most cases this is not such a...
5
6133
by: yancheng.cheok | last post by:
after reading http://www.codeproject.com/vcpp/stl/vector_vs_deque.asp, i realize that deque has its own speed advantage over vector in all the aspect (except for memory deallocation). does it...
3
1774
by: Dave | last post by:
A quick question: vector <T *test_vec; T testT; test_vec.push_back(&testT); T * testT2p = new T; test_vec.push_back(testT2p); Now at the end do I need to explicitly delete the vector...
13
2857
by: smp | last post by:
Does anyone know why making a vector of pointers is so much less efficient than a vector of objects? For a simple example: int num = 20; vector<int*v_int_ptr; v_int_ptr.reserve(num); ...
42
4460
by: barcaroller | last post by:
In the boost::program_options tutorial, the author included the following code: cout << "Input files are: " << vm.as< vector<string() << "\n"; Basically, he is trying to print a vector...
0
7051
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
7054
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
7097
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
1
6750
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
6993
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
5353
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
1
4794
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
4493
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
1307
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.