Pointers और Memory

Dynamic Memory Management

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

Dynamic Memory Management क्या है?

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

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

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

  • 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 लिखें।