क्योंकि मुझे स्मृति आवंटन के बारे में बहुत कुछ पता नहीं है, मैं जानना चाहता हूं कि इस तरह लगातार बाइट्स (सरणी) के ब्लॉक को हटाना सुरक्षित है या नहीं।

void Free(void* ptr, size_t cbSize)
{
    if (cbSize == 0) return;
    if (ptr == NULL) return;

    for(size_t i = cbSize; i > 0; i--)
    {
        char* p = &((char*)ptr)[i];
        delete p;
    }

    char* p = (char*) (ptr);
    delete p;
}

मैंने निम्नलिखित परिस्थितियों में इस विधि की कोशिश की है और कोई त्रुटि नहीं मिली है।

int* a = new int[100];
Free(a, 100 * sizeof(int));

int* a = (int*) malloc(100 * sizeof(int));
Free(a, 100 * sizeof(int));
-2
Cain Wildtale 15 अक्टूबर 2018, 03:42

1 उत्तर

सबसे बढ़िया उत्तर

आप जो आवंटित करते हैं उसे आप हमेशा हटाते हैं; बिल्कुल और केवल जो आप आवंटित करते हैं। यदि आप new एक ही चीज हैं, तो आप delete एक चीज। तथ्य यह है कि एक से अधिक बाइट लेने के लिए "एकल चीज़" अप्रासंगिक है; आप delete क्या आप new

मैं इस मामले में अपना कार्य कैसे काम कर सकता हूं?

आप नहीं। आपने newएक सरणी को ints संपादित किया है। तो आपको delete ints की एक सरणी चाहिए। सी ++ में प्रकार मायने रखता है।

5
Nicol Bolas 15 अक्टूबर 2018, 00:49