Please give me a hint!

C

chuan

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.
 
C

chuan

Paavo Helde <[email protected]> kirjutas:




chuan <[email protected]> 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.
 
J

Juha Nieminen

chuan said:
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).
 
M

mzdude

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.
 
V

Victor Freire

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



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 -
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,767
Messages
2,569,570
Members
45,045
Latest member
DRCM

Latest Threads

Top