c++ - Why do I get memory errors when mmap()'ing a JPG file? -
मेरे पास कोड का निम्न भाग है:
char * प्रेषक :: तैयार करना डेटा (चार * फ़ाइलनाम, अहस्ताक्षरित लंबे समय से अंतराल बाइटटॉट्रांसफर) {int fd, pagesize; चार * डेटा; ifstream फ़ाइल (फ़ाइलनाम, आईओएस :: द्विआधारी | आईओएस :: एट); Int आकार = file.tellg (); Cout & lt; & lt; "फ़ाइल आकार:" & lt; & lt; आकार & lt; & lt; endl; अगर (आकार और लेफ्टिनेंट; बाइट्स टोट्र्सफर) {cout & lt; & lt; "निर्दिष्ट संख्याओं की तुलना में छोटी बाइट्स {" & lt; & lt; बाइट्सटोट्रान्सफर & lt; & lt; "} स्थानांतरित करने के लिए - बाहर निकल रहा है! \ n"; बाहर निकलें (1);} एफडी = ओपन (फाइलनाम, ओ_आरडीएनआई); अगर (एफडी == नल) {fputs ("फ़ाइल त्रुटि", stderr); बाहर निकलें (1);} सीओएटी & एलटी; & lt; "फ़ाइल खोलें:" & lt; & lt; फ़ाइल नाम & lt; & lt; endl; पेजेज़ = मिलना (); Cout & lt; & lt; "पेजइज़:" & lt; & lt; पेजize & lt; & lt; endl; डेटा = स्टैटिक_कास्ट & lt; char * & gt; (मिमीप ((caddr_t) 0, बाइटटोट्रान्सफर, PROT_READ, MAP_SHARED, एफडी, 0)); यदि (* डेटा == -1) {fputs ("मेमोरी त्रुटि", stderr); बाहर निकलें (2);} वापसी डेटा; } यह प्रतीत होता है पाठ और .deb फ़ाइलों के लिए ठीक काम करता है - हालांकि, जब ~ 3MB छवि फ़ाइल (.jpg) की कोशिश कर रहा हो, मुझे मेमोरी त्रुटियां मिलती हैं:
फ़ाइल का आकार: 3333840 फ़ाइल खोलें: t1.jpg पेजिसः 4096 मेमोरी त्रुटि [अध्याय 1 (प्रक्रिया 32 9 3) कोड से निकल गया 02] क्या मैं mmap () का उपयोग कर रहा हूँ I गलत है? मैं एक साधारण आवरण लिखने की कोशिश कर रहा हूं जो कि किसी भी प्रकार की फ़ाइल लेगा और वर्णित संख्या में बाइट्स को वापस कर सकता है।
आपको बस डेटा == -1 (या, यहां तक कि बेहतर, MAP_FAILED ) और न * डेटा == -1 ( * के माध्यम से dereferencing यहाँ गलत है।) कारण आपका कोड विफल हो रहा है क्योंकि प्रत्येक JPEG फ़ाइल का पहला बाइट < कोड> एफएफ हेक्स या -1 में हस्ताक्षर किए दशमलव में।
JPEG पर अधिक विवरण के लिए, "JPEG फ़ाइल स्वरूप" के लिए Google। उदाहरण के लिए, "SOI" पर खोजें।
Comments
Post a Comment