विषय पर बढ़ें

अंतिम अद्यतन:2026-10-12

C++ memory leak detection

C++那些事 का memory कैसे detect करें

हम C/C++ code लिखते समय memory की समस्याएँ हर जगह रहती हैं, चाहे काम हो या interview, memory का topic हमेशा साथ चलता है।

आज एक उदाहरण से Step by Step valgrind से C++ memory detection करना सीखते हैं।

तीन समस्याओं का simulation:

  • Memory release की समस्या का detection
  • Write overflow detection
  • Read overflow detection

आप सीखेंगे:

  • इन तीनों समस्याओं का पता कैसे लगाएँ
  • gdb + valgrind को साथ मिलकर debug करने में कैसे उपयोग करें

साथ चर्चा करने के लिए स्वागत है।

1. उदाहरण से शुरुआत

नीचे दिए code को देखिए, हमें कई समस्याएँ दिखेंगी:

  • strcpy unsafe है, ठीक कितनी memory size है, boundary पार हो सकती है
  • print के समय msg का access boundary के बाहर
  • Destructor ने memory release नहीं की

बिल्कुल वैसा ही है जैसा कभी आपने खुद code लिखा हो, हाहा।

इस section में इन समस्याओं का पता लगाएँगे।

class Message {
private:
    char *msg;

public:
    Message(const char *text) {
        msg = new char[3];
        std::strcpy(msg, text);
    }

    void printOutOfRange() {
        std::cout << msg[5] << std::endl;
    }

    ~Message() {

    }
};

int main() {
    Message message("hello");
    message.printOutOfRange();

    return 0;
}

2. valgrind

valgrind इंस्टॉल करना:

brew install valgrind // mac
sudo apt-get install install // ubuntu

अन्य systems के इंस्टॉलेशन के लिए official address देखें:

https://valgrind.org/downloads/

3. उपयोग

सबसे पहले compile करते समय debug, -g उपयोग करने की सलाह है, इससे code की कौन सी line में समस्या है पता चल सकता है।

g++ val_test.cc -g

फिर हम execute करते हैं:

valgrind --leak-check=full ./a.out 

हमें valgrind की दी हुई जानकारी मिलती है:

detect

इस समय, ऊपर हम कुछ समस्याएँ देख सकते हैं:

  • Invalid write

हुआ val_test.cc::11 में

  • Invalid read

हुआ val_test.cc:10 में

  • Memory leak

1 allocs, 0 frees, 3 bytes allocated.

यह जानकारी हमें तेज़ी से यह पता लगाने देती है कि code की कौन सी line में समस्या है।

4. gdb डीबगिंग

जब हम इसमें --vgdb-error=0 जोड़ देते हैं, तो हम बहुत आसानी से code debug कर सकते हैं, एक तरफ debug करते हुए, दूसरी तरफ देखते हुए कि कहाँ समस्या है।

valgrind --leak-check=full --vgdb-error=0 ./a.out 

attach

इसके बाद, हम gdb से attach करते हैं

gdb -q a.out

ऊपर वाली target line को gdb में paste करें, फिर continue करें, हम संगत line का code और valgrind की आगे की output देख सकते हैं।

gdb

continue

इस section में memory समस्याओं का व्यवहार दिखाया गया, अगर आपकी मदद किया हो तो share करने के लिए स्वागत है।

संबंधित विषय

टिप्पणियाँ