Pointers और Memory

Dynamic Memory Management

Runtime-sized array allocate और सुरक्षित release करें।

Dynamic Memory Management क्या है?

Compile time पर size या lifetime तय न हो तो dynamic storage चाहिए।

महत्वपूर्ण बातें

  • Pointer किसी जीवित compatible object को point करे या null हो।
  • हर owned allocation को ठीक एक बार release करें।
  • Ownership और const interfaces स्पष्ट रखें।

C और C++ code examples

C
कोड चलाएँ →
main.c
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    size_t count = 5;
    int *values = calloc(count, sizeof *values);
    if (!values) return 1;
    for (size_t i = 0; i < count; ++i) values[i] = (int)(i * i);
    printf("last=%d\n", values[count - 1]);
    free(values);
    return 0;
}
अपेक्षित output
last=16
C++
कोड चलाएँ →
main.cpp
#include <iostream>
#include <vector>

int main() {
    std::vector<int> values(5);
    for (std::size_t i = 0; i < values.size(); ++i) values[i] = static_cast<int>(i * i);
    std::cout << "last=" << values.back() << '\n';
}
अपेक्षित output
last=16

C और C++ की तुलना

C malloc/calloc को free से pair करके failure जाँचता है; std::vector memory own और automatically release करता है।

C

Ownership और cleanup programmer द्वारा लागू conventions हैं।

C++

Containers और RAII ownership को object lifetime से जोड़ते हैं।

अभ्यास

दोनों versions चलाकर बदलें और language guarantees की तुलना करें।

  • Null और allocation failure paths test करें।
  • AddressSanitizer और UndefinedBehaviorSanitizer चलाएँ।
  • हर pointer का ownership लिखें।

चैलेंज से अभ्यास करें

इस पाठ में सीखी बात से एक असली समस्या हल करें। हर चैलेंज ब्राउज़र में चलता है, तुरंत टेस्ट और AI रिव्यू के साथ।

सभी चैलेंज