मैं हाल ही में इलेक्ट्रिक बाड़ के साथ प्रयोग कर रहा हूं और मैं यह नहीं समझ सकता कि इसे सी ++ कोड के साथ कैसे उपयोग किया जाए।एक सी ++ प्रोग्राम में बिजली की बाड़ का उपयोग
यहाँ एक उदाहरण है:
// test.cpp
#include <cstdlib>
using namespace std;
int main()
{
int *a = new int(10);
delete a;
}
मैं
g++ ./test.cpp -o test -lefence -L/home/bor/efence_x86_64/lib -lpthread
के साथ संकलित और मैं शुरू में इलेक्ट्रिक बाड़ बैनर न दिखाई दे और नहीं (का उपयोग करते हुए निष्पादन में एफई प्रतीकों पा सकते हैं एनएम कमांड)।
लेकिन अगर मैं तो जैसे किसी प्रोग्राम को संशोधित:
// test.cpp
#include <cstdlib>
using namespace std;
int main()
{
char *p = (char*)malloc(20);
free(p);
int *a = new int(10);
delete a;
}
सब कुछ अच्छा है - एफई प्रकट होता है। मुझे पता है कि यह समस्या हल करता है, मुझे पता है :)। मैं बस समझना चाहता हूं कि यह पहली जगह क्यों नहीं काम करता था, क्योंकि new()
को malloc()
पर कॉल करना चाहिए, और delete()
free()
पर कॉल करें, नहीं?
इस कारण में मुझे बूस्ट पुस्तकालयों और कई अन्य लोगों का उपयोग करने का एक बड़ा प्रोजेक्ट है। और यह प्रोग्राम सीधे malloc()
या free()
पर कॉल नहीं करता है। और जब मैं इसे ईएफ के साथ बनाता हूं, न कि मैंने केवल अंतिम निष्पादन योग्य को ईएफ से जोड़ा है, लेकिन उन सभी पुस्तकालयों को पुनर्निर्मित किया है जो उन्हें ईएफ को जोड़ने की कोशिश कर रहे हैं। और मैं उनमें से किसी एक में ईएफ प्रतीक नहीं पा रहा हूं। क्या यह सही दृष्टिकोण है? या यह गलत है और ईएफ केवल अंत में निष्पादन योग्य से जुड़ा होना चाहिए, libs बरकरार रखा जाना चाहिए? लेकिन फिर मैं निष्पादन योग्य में ईएफ प्रतीक नहीं पा रहा हूं।
आप valgrind से अधिक efence साथ क्यों जाते हो (समान डॉक्स के रूप में ऊपर उद्धृत से)? – Anycorn
क्योंकि मुझे एआरएमवी 5 (http://stackoverflow.com/q/9456194/4378) पर चलने वाले प्रोग्राम को डीबग करने की आवश्यकता है। Valgrind वहाँ छेड़छाड़ नहीं है। –