Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   Please give me a hint! (http://www.velocityreviews.com/forums/t681047-please-give-me-a-hint.html)

chuan 04-23-2009 03:51 AM

Please give me a hint!
 
I am trying to write a class for jackknife algorithm.
I need a dynamic array, which I call jack, inside the class.
Here is my code in jackknife.h

#include <iostream>
#include <vector>
#include <math.h>

class jackknife{
int bin;
double* jack;
double* data;

public:
jackknife();
~jackknife();
int setbin(int);
};

jackknife::jackknife() {
bin = 0;
}

jackknife::~jackknife(){
delete [] jack;
}

int jackknife::setbin(int n) {
bin = n;
jack = new double [n];
return bin;
}

I allocat memory in setbin, then debugger tells me
the program crashes in the deconstructor, when I free the memory.

I have little experience of C++, I realize the memory management must
be wrong.
But how to correct it.

Excuse me for my bad english.


chuan 04-23-2009 04:58 AM

Re: Please give me a hint!
 
On Apr 23, 12:10*am, Paavo Helde <pa...@nospam.please.ee> wrote:
> Paavo Helde <pa...@nospam.please.ee> kirjutas:
>
>
>
>
>
> > chuan <chuan...@googlemail.com> kirjutas:

>
> >> I am trying to write a class for jackknife algorithm.
> >> I need a dynamic array, which I call jack, inside the class.
> >> Here is my code in jackknife.h

>
> >> #include <iostream>
> >> #include <vector>
> >> #include <math.h>

>
> >> class jackknife{
> >> * int bin;
> >> * double* jack;
> >> * double* data;

> [...]
>
> >> int jackknife::setbin(int n) {
> >> * bin = n;
> >> * jack = new double [n];

>
> Coming to think about that, any particular reason to not use std::vector
> <double> instead of raw pointers? You have already #included <vector>...
>
> Paavo


Yes, I want to use std::vector, but I got the same error at
deconstructor.
Your first post give me the right direction. I once made the same
mistake, now again.
Thank you very much.

Juha Nieminen 04-23-2009 07:42 AM

Re: Please give me a hint!
 
chuan wrote:
> Yes, I want to use std::vector, but I got the same error at
> deconstructor.


So rather than figuring out the problem instead you want to make your
class unsafer by allocating the array manually?

> Your first post give me the right direction.


Your class still has tons of problems (such as setbin() leaking memory).

mzdude 04-23-2009 12:51 PM

Re: Please give me a hint!
 
On Apr 22, 10:51*pm, chuan <chuan...@googlemail.com> wrote:
> I am trying to write a class for jackknife algorithm.
> I need a dynamic array, which I call jack, inside the class.
> Here is my code in jackknife.h
>
> #include <iostream>
> #include <vector>
> #include <math.h>
>
> class jackknife{
> * int bin;
> * double* jack;
> * double* data;
>
> public:
> * jackknife();
> * ~jackknife();
> * int setbin(int);
>
> };
>
> jackknife::jackknife() {
> * bin = 0;
>
> }
>
> jackknife::~jackknife(){
> * * delete [] jack;
>
> }
>
> int jackknife::setbin(int n) {
> * bin = n;
> * jack = new double [n];
> * return bin;
>
> }
>
> I allocat memory in setbin, then debugger tells me
> the program crashes in the deconstructor, when I free the memory.
>
> I have little experience of C++, I realize the memory management must
> be wrong.
> But how to correct it.


class jackknife {
std::vector<double> jack;
std::vector<double> data;

size_t setbin( size_t newSize )
{
jack.resize(newSize);
return newSize;
}

};

Note that you no longer need to worry about constructors, destructors
or copy operators.

Victor Freire 04-24-2009 04:17 PM

Re: Please give me a hint!
 
From what I read, it seems all the code above is inside a header file?
Non-inline function declarations should be in a separate .c or .cpp
file.

If you are still considering using the more C-ish approach with
pointers to the instead of using a vector, if you look closely at
setbin() you will realize you are not freeing the memory from previous
call before allocating more.

And, more information like the detailed error message would be great.

Best regards,
Victor Freire



On Apr 23, 9:51*am, mzdude <jsa...@cox.net> wrote:
> On Apr 22, 10:51*pm, chuan <chuan...@googlemail.com> wrote:
>
>
>
>
>
> > I am trying to write a class for jackknife algorithm.
> > I need a dynamic array, which I call jack, inside the class.
> > Here is my code in jackknife.h

>
> > #include <iostream>
> > #include <vector>
> > #include <math.h>

>
> > class jackknife{
> > * int bin;
> > * double* jack;
> > * double* data;

>
> > public:
> > * jackknife();
> > * ~jackknife();
> > * int setbin(int);

>
> > };

>
> > jackknife::jackknife() {
> > * bin = 0;

>
> > }

>
> > jackknife::~jackknife(){
> > * * delete [] jack;

>
> > }

>
> > int jackknife::setbin(int n) {
> > * bin = n;
> > * jack = new double [n];
> > * return bin;

>
> > }

>
> > I allocat memory in setbin, then debugger tells me
> > the program crashes in the deconstructor, when I free the memory.

>
> > I have little experience of C++, I realize the memory management must
> > be wrong.
> > But how to correct it.

>
> class jackknife {
> * std::vector<double> jack;
> * std::vector<double> data;
>
> size_t setbin( size_t newSize )
> * {
> * * *jack.resize(newSize);
> * * *return newSize;
> * }
>
> };
>
> Note that you no longer need to worry about constructors, destructors
> or copy operators.- Hide quoted text -
>
> - Show quoted text -




All times are GMT. The time now is 12:27 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.