Sida 1 av 1

[C++] Nyrbörjar strul med pekare och klasser [LÖST]

Postat: 28 apr 2008, 18:13
av O_Isoz
Hej
Jag försöker som bäst på att lära mig skriva c++ , som start projekt så har jag valt att försöka skriva en cirkulär buffer, Dock så beter sig variablerna riktigt mysko just nu och jag förstår inte varför...
cirbuf.h

Kod: Markera allt

class Circ_buf{
    private:
char b_buf[];
unsigned int b_pos;
unsigned int b_sta; // where is zero?
unsigned int b_size;
public:
    Circ_buf(int llength);
    bool buff_get(char *new_loc); // Memcpy the data to a new location
    bool buff_add(int length,char *new_data); //add data to the buffer
    int buff_size(void);
    int buff_print(void);
    };
Cirbuf.cpp;

Kod: Markera allt


Circ_buf::Circ_buf(int llength)
{
  b_buf[llength];
  b_pos =0;
  b_sta = 0; //
  b_size = llength;
}

bool Circ_buf::buff_add(int length,char *new_data)
{
    int i =1;
     cout<< "init add at pos "<<b_pos<<" size"<<b_size<<endl;
    while ((i-1) < length)
    {
        printf("b_pos =%d \n",b_pos);
        cout<< "add at pos " << b_pos <<" at i"<<i<<endl;
        b_buf[b_pos] = new_data[i];
        b_pos++;
        i++;
    }
}
När jag kör följande kod

Kod: Markera allt


    char c[3];
    char d[3];
    c[0] ='1';
    c[1] ='2';
    c[2] ='\n';
    Circ_buf cb = Circ_buf(10);
    cb.buff_add(3,c);
Så blir utskriften:

Kod: Markera allt

init add at pos 0 size10
b_pos =0
add at pos 0 at i1
b_pos =51
add at pos 51 at i2
b_pos =52
add at pos 52 at i3
Kan någon ser varför bpos får värdet 51? (det sker i raden "b_buf[b_pos] = new_data;" )
Visst är det så att raden "b_buf[llength];" reservear ett minnes utrymme för vektorn?

Tack för hjälpen!
-Oscar

Re: [C++] Nyrbörjar strul med pekare och klasser

Postat: 28 apr 2008, 19:59
av Lars
O_Isoz skrev:Visst är det så att raden "b_buf[llength];" reservear ett minnes utrymme för vektorn?
Nej, den raden gör absolut ingenting ;) Jag har ett svagt minne av att man använder operatorn new i C++ (och sedan delete i destruktorn).

Re: [C++] Nyrbörjar strul med pekare och klasser

Postat: 28 apr 2008, 20:09
av O_Isoz
Lyckades lösa det:
använde pekare istället för vektorer samt kommandot "new" för att allokera minnesutrymme till pekarna

-Oscar