के बाद नई मेमोरी को शून्य कैसे करें प्रारंभ में आवंटित स्मृति को बरकरार रखने के दौरान रीयलोक को कॉल करने के बाद नई मेमोरी को शून्य करने का सबसे अच्छा तरीका क्या है?realloc
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <stdio.h>
size_t COLORCOUNT = 4;
typedef struct rgb_t {
int r;
int g;
int b;
} rgb_t;
rgb_t** colors;
void addColor(size_t i, int r, int g, int b) {
rgb_t* color;
if (i >= COLORCOUNT) {
// new memory wont be NULL
colors = realloc(colors, sizeof(rgb_t*) * i);
//something messy like this...
//memset(colors[COLORCOUNT-1],0 ,sizeof(rgb_t*) * (i - COLORCOUNT - 1));
// ...or just do this (EDIT)
for (j=COLORCOUNT; j<i; j++) {
colors[j] = NULL;
}
COLORCOUNT = i;
}
color = malloc(sizeof(rgb_t));
color->r = r;
color->g = g;
color->b = b;
colors[i] = color;
}
void freeColors() {
size_t i;
for (i=0; i<COLORCOUNT; i++) {
printf("%x\n", colors[i]);
// can't do this if memory isn't NULL
// if (colors[i])
// free(colors[i]);
}
}
int main() {
colors = malloc(sizeof(rgb_t*) * COLORCOUNT);
memset(colors,0,sizeof(rgb_t*) * COLORCOUNT);
addColor(0, 255, 0, 0);
addColor(3, 255, 255, 0);
addColor(7, 0, 255, 0);
freeColors();
getchar();
}
यह * बहुत * खराब प्रदर्शन होता है जब रंगों की सूची के अंत में एक रंग जोड़ा जाता है, सामान्य कॉलिंग पैटर्न। आप पुनः आवंटन से पहले एक समय में केवल एक तत्व जोड़ देंगे। कम से कम आवंटित करने पर विचार करें (i + 1, COLORCOUNT * 2)। –
यह समस्या का वर्णन करने के लिए सिर्फ एक उदाहरण है। वास्तविक स्रोत एक हैश टेबल है जो प्राइम नंबर आईआईआरसी –