-
September 19th, 2009, 02:23 AM
#1
ncurses segfaulting at waddstr()
I made a wrapper for the curses library except for that when i test it, it segfaults
it was compiled with gcc4.3.3 and ncurses5.7 on a ubuntu 9.04 system
here is my code:
main.cpp:
Code:
#include "./include/ncurses/ncurses.h"
int main()
{
nCurses out;
out << "Testing 123...\n";
out.refresh();
return 0;
}
./include/ncurses/ncurses.h:
Code:
#ifndef _NCURSES_H_
#define _NCURSES_H_
#include <curses.h>
#include <string>
using namespace std;
struct term_s{
int row;
int col;
};
class nCurses
{
public:
// constructors and deconstructors
nCurses();
nCurses(bool echo);
nCurses(bool echo, int row, int col);
nCurses(bool echo, int row, int col, int height, int width);
~nCurses();
// streaming functions
friend const nCurses& operator << (nCurses& n, const char* c);
// functions to get the private data
bool getechostatus() const;
int geterrno() const;
term_s getcurpos() const;
term_s getwinsize() const;
// misc functions
int echo(bool echo); // control echoing of input characters
int cursor(int row, int col); // move the virtual cursor
int refresh(); // refresh the screen from the buffer
private:
void init();
bool echostatus; // contains if echo is on or off
int errno; // maintains the errno (ERR or !ERR) of the latest function
term_s winsize; // contains the current cursor postion and the terminal size
WINDOW* window; // the virtual window that functions write to
static bool ncurses_started; // monitors if ncurses has been started
static int nCurses_count; // keeps a count of how many nCurses objects have been constructed
};
#endif
./include/ncurses/ncurses.cpp:
Code:
#include "ncurses.h"
/* init the static variables */
bool nCurses::ncurses_started = false;
int nCurses::nCurses_count = 0;
/* init some variables */
void nCurses::init()
{
if (ncurses_started == false)
{
initscr();
ncurses_started = true;
}
getmaxyx(stdscr, winsize.row, winsize.col);
}
/* constructors and deconstructors */
nCurses::nCurses()
{
init();
nCurses(false, 0, 0, winsize.row, winsize.col);
}
nCurses::nCurses(bool echo)
{
init();
nCurses(echo, 0, 0, winsize.row, winsize.col);
}
nCurses::nCurses(bool echo, int row, int col)
{
init();
nCurses(false, row, col, winsize.row, winsize.col);
}
nCurses::nCurses(bool echo, int row, int col, int height, int width) : echostatus(echo)
{
nCurses_count++;
init();
window = newwin(height, width, row, col);
keypad(window, TRUE);
cbreak();
if (echo == false)
{
errno = noecho();
if (errno == ERR)
echostatus = true;
}
cursor(row, col);
}
nCurses::~nCurses()
{
nCurses_count--;
delwin(window);
if (nCurses_count <= 0)
{
endwin();
}
}
/* streaming functions */
const nCurses& operator << (nCurses& n, const char* c)
{
n.errno = waddstr(n.window, c);
return n;
}
/* functions to get the private data */
bool nCurses::getechostatus() const
{
return echostatus;
}
int nCurses::geterrno() const
{
return errno;
}
term_s nCurses::getcurpos() const
{
term_s curpos;
getyx(window, curpos.row, curpos.col);
return curpos;
}
term_s nCurses::getwinsize() const
{
return winsize;
}
/* misc functions */
int nCurses::echo(bool echo)
{
if ((echo == true) && (echostatus != true))
{
errno = ::echo();
if (errno != ERR)
echostatus = true;
}
else if ((echo == false) && (echostatus != false))
{
errno = noecho();
if (noecho() != ERR)
echostatus = false;
}
return errno;
}
int nCurses::cursor(int row, int col)
{
errno = wmove(window, row, col);
return errno;
}
int nCurses::refresh()
{
errno = wrefresh(window);
return errno;
}
-
September 19th, 2009, 02:24 AM
#2
Re: ncurses segfaulting at waddstr()
whoops, i see a orphaned <string> library there that needs to be deleted...
still segfaulting
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|