C++ program crashes


 
Thread Tools Search this Thread
Top Forums Programming C++ program crashes
# 1  
Old 03-16-2012
C++ program crashes

Hi,

Can anyone tell me why the below program is crashing? and where exactly it is crashing. What is the corrective measure to be taken to make it work fine?

Code:
#include <iostream>
#include <cstring>
using namespace std;

class CString {
    char* m_data;

public:
    CString() : m_data(NULL) { }

    CString(char* t) {
        m_data = new char[strlen(t) + 1];
        strcpy(m_data,t);
    }

    operator char*() {
        cout << "function called " << endl;
        return m_data;
    }

    ~CString() {
        delete m_data;
    }
};

int main() {
    CString str1 = "Hello";
    CString str2 = str1;
    cout << str1 << endl;
}

# 2  
Old 03-16-2012
When you assign one class to the other, all you're copying is the pointer, not the memory itself. So they both end up holding pointers to the same memory.

When they go out of scope, they both try to free the same pointer. The first will succeed. The second to go out of scope will crash.

You should create a copy constructor for the class, which will be used whenever you assign another class to it with =.

Code:
class CString
{
...

CString(const CString& copy)
{
        m_data=new char[strlen(copy.m_data) + 1];
        strcpy(m_data, copy.m_data);
}

...

};

This User Gave Thanks to Corona688 For This Post:
# 3  
Old 05-03-2012
Hi, Corona688

When I add a copy constructor function to the above class omitting the "const" keyword as
Code:
    CString(CString& s) {
        cout << "copy constructor called" << endl;
    }

then when I compile this program I get the errors saying that:

In function int main():
error: no matching function for call to CString::CString(CString)
note: candidates are: CString::CString(CString&)
note: CString::CString(const char*)
note: CString::CString()


But, the custom copy constructor should not restrict to have the const keyword. It should work even if it is not present right? I checked this behavior with another sample program, there it works fine. Then why const keyword is mandatory here?
Code:
    CString(const CString& s) {

# 4  
Old 05-03-2012
Quote:
But, the custom copy constructor should not restrict to have the const keyword.
Why not?

If it was allowed to modify other CString's inside a copy constructor, that could cause very bad recursive bugs with copy constructors calling copy constructors calling copy constructors, etc. Even with this restriction you still sometimes need to watch out for that should you declare other CString's inside there.
# 5  
Old 05-04-2012
Quote:
Originally Posted by Corona688
Why not?

If it was allowed to modify other CString's inside a copy constructor, that could cause very bad recursive bugs with copy constructors calling copy constructors calling copy constructors, etc. Even with this restriction you still sometimes need to watch out for that should you declare other CString's inside there.
I get it, but I am just trying to understand whether it is really a compiler's behavior? Because, it behaves differently in another simple C++ program, where I did not have the const keyword in the copy constructor and the program runs pretty fine.
# 6  
Old 05-04-2012
Was the non-const version passing by reference or not? If it wasn't, it might have needed a copy constructor to call the copy constructor, which really isn't going to work.
# 7  
Old 05-04-2012
Quote:
Originally Posted by Corona688
Was the non-const version passing by reference or not? If it wasn't, it might have needed a copy constructor to call the copy constructor, which really isn't going to work.
Yes, of course it is pass-by-reference. The prototype is
Code:
class A {
public:
    A (A&) {}
};

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Web Development

Apache2 Crashes

The Apache server suddenly stops. I am running Debian Jessie Here are some diagnostics: root@meow:/var/www# apachectl configtest AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress... (4 Replies)
Discussion started by: Meow613
4 Replies

2. UNIX and Linux Applications

Apcupsd crashes

I am trying to run apcupsd, but it will not retain contact the UPS root@meow:/home/ethan/UPS/gapcmon-0.8.9# /etc/init.d/apcupsd start Starting UPS power management: A copy of the daemon is still running. If you just stopped it, please wait about 5 seconds for it to shut down.... (0 Replies)
Discussion started by: Meow613
0 Replies

3. Programming

Program crashes on calling __libc_msgrcv()

Hi, I am a newbie to linux programming. I have implemented msgqueue in C. msgrcv() call at the client end is as below: msgrcv( msgqid, msgptr, msgsize, msgtype, 0 ); My program works fine when msgrcv () from /lib/libc.so.6 is called. However it crashes when __libc_msgrcv() is called. ... (3 Replies)
Discussion started by: praasanna
3 Replies

4. Red Hat

7z crashes system

Can someone tell my why every time I try to use 7z it freezes my system? I can't move my mouse, I can't type, I can't kill my xsession. I then restart my system and everything returns to normal. When I try to use 7z my system again freezes. (11 Replies)
Discussion started by: cokedude
11 Replies

5. Solaris

Server crashes when not in use.

Production server crashes when there is no traffic on it. Can only recover by going to ALOM and reboot the server. This seems to happen about the same time every month. The only good thing is the server is not in production at the time of the crash. I have been unable to locate any information in... (5 Replies)
Discussion started by: Joeentech
5 Replies

6. SuSE

Chromium flashes and crashes

I am running openSUSE 11.2 with KDE4.5 on my eMachines e525. I just did a "zypper up" on my system and it reported that Chromium was going to be updated. I agreed and the when the update was finished I shut down Chromium and started it again. It flickered on the screen for a moment and crashed.... (6 Replies)
Discussion started by: Druonysus
6 Replies

7. Programming

C++ program crashes

Hi, Could anyone tell me the reason why the following program crashes? class A { int x; public: A() { cout << "from A()" << endl; } ~A() { cout << "from ~A()" << endl; } }; class B : public A { public: B() { cout << "from B()"... (2 Replies)
Discussion started by: royalibrahim
2 Replies

8. Linux

gethostnameby_r crashes

Hello all, I'm trying to use gethostbyname_r function with 6 arguments in one of my functions. But the call to this crashes the program. Kindly help me in resolving this... Compiler Info: Linux target: i686-hardhat-linux version: 3.3.1 The following is the piece of code I'm trying to... (1 Reply)
Discussion started by: rajans
1 Replies

9. Programming

AIX 5.3 64-bit program crashes with AIX 5.1

I have an AIX 64-bit program which uses following from AIX5.3 /usr/lib/libc.a(shr_64.o) /usr/lib/libpthread.a(shr_xpg5_64.o) /home/jeet_xp/export/power/usr/lib/libsarpc.a(shr.o) /unix /usr/lib/libcrypt.a(shr_64.o) /usr/lib/libc_r.a(shr_64.o) ... (3 Replies)
Discussion started by: jeet_xp
3 Replies

10. HP-UX

Program crashes with optimization level O2

I am experiencing a difficulty undersatnding why my program (C++, HP UNIX) crashes. It crashes only when I build it with -O (+O2) optimization switch (used in aCC compiler). It works ok with +O0 or +O1 optimization. Also, I see that local variables are shown incorrecly when program is built... (3 Replies)
Discussion started by: Yuriy07
3 Replies
Login or Register to Ask a Question