से लौटाया गया है हम Matlab कंपाइलर से बनाई गई लाइब्रेरी के साथ इंटरफेसिंग कर रहे हैं। हमारी समस्या लाइब्रेरी से लौटाई गई सरणी से संबंधित है।mxArray ऑब्जेक्ट्स पर mxDestroyArray को कॉल करना मैटलैब कंपाइलर रनटाइम
एक बार जब हम सरणी के साथ समाप्त हो जाते हैं, तो हम स्मृति को मुक्त करना चाहते हैं, हालांकि, ऐसा करने से कभी-कभी विभागीकरण दोष होते हैं।
यहाँ मैटलैब पुस्तकालय (bugtest.m
) ::
यहाँ आदेश हम इसे बनाने के लिए इस्तेमाल किया है (, libbugtest.so
बनाने और libbugtest.h
) ::
mcc -v -W lib:libbugtest -T link:lib bugtest.m
यहाँ हमारे सी है परीक्षण कार्यक्रम (bug_destroyarray.c
) ::
#include <stdio.h>
#include <stdlib.h>
#include "mclmcrrt.h"
#include "libbugtest.h"
#define TESTS 15000
int main(int argc, char **argv)
{
const char *opts[] = {"-nojvm", "-singleCompThread"};
mclInitializeApplication(opts, 2);
libbugtestInitialize();
mxArray *output;
mxArray *input;
double *data;
bool result;
int count;
for (count = 0; count < TESTS; count++) {
input = mxCreateDoubleMatrix(4, 1, mxREAL);
data = mxGetPr(input); data[0] = 0.5; data[1] = 0.2; data[2] = 0.2; data[3] = 0.1;
output = NULL;
result = mlfBugtest(1, &output, input);
if (result) {
/* HERE IS THE PROBLEMATIC LINE */
/*mxDestroyArray(output);*/
}
mxDestroyArray(input);
}
libbugtestTerminate();
mclTerminateApplication();
}
यहां कैसे हम सी कार्यक्रम (bug_destroyarray
बनाने) ::
mbuild -v bug_destroyarray.c libbugtest.so
हम मानते हैं कि mxDestroyArray(output)
समस्याग्रस्त है संकलन है।
- 32 क्लस्टर नोड्स के प्रत्येक पर:
हम निम्नलिखित क्रैश होने का परीक्षण करने चलाते हैं।
- रन
bug_destroyarray
। - सेगमेंटेशन दोषों के लिए आउटपुट आउटपुट।
लगभग 10% समय दुर्घटनाग्रस्त है। यदि यह नोड्स में स्वतंत्र है तो आपको लगता है कि यह लगभग 0.3% समय क्रैश हो रहा है।
जब हम उस समस्याग्रस्त रेखा को निकालते हैं तो हम इसे क्रैश करने में असमर्थ होते हैं।
हालांकि इस लाइन को शामिल नहीं होने पर स्मृति उपयोग धीरे-धीरे बढ़ता है।
हमारे द्वारा किए गए शोध से, ऐसा लगता है कि हम वापस सरणी को नष्ट करने के लिए माना जाता है, अगर नहीं, तो हम स्मृति को लीक करने से कैसे रोक सकते हैं?
धन्यवाद।
क्या आप वाकई 'mlfBugtest' सही का हस्ताक्षर है कर रहे हैं? प्रलेखन 'एमएलएफ'-फ़ंक्शंस रिटर्न' शून्य 'इंगित करता है, न कि' बूल '। – wakjah