c - zsh:abort message after all the program has been run? -


इसलिए मैं यह कोड चला रहा हूं

  #include & lt; stdio.h & gt; #define ARRAYSIZE 17 # परिभाषित NUMTHREADS 4 स्ट्रेट थ्रेडडेटा {int start, stop; Int * सरणी; }; शून्य वर्गरूपर (स्ट्रेट थ्रेडडेटा * डेटा) {int start = data- & gt; प्रारंभ; इंट स्टॉप = डाटा- & gt; स्टॉप; Int * array = data- & gt; सरणी; Int i; के लिए (i = प्रारंभ; i & lt; रोक; i ++) {सरणी [i] = i * i; }} Int मुख्य (शून्य) {int सरणी [ARRAYSIZE]; Int i, शुरू, बंद करो; स्ट्रेट थ्रेडडेटा * डेटा; डेटा- & gt; सरणी = सरणी; इंट कार्सप्रथथ्रेड = (ARRAYSIZE + NUMTHREADS-1) / NUMTHREADS; (I = 0; i & lt; NUMTHREADS; i ++) के लिए {start = i * tasksPherThread; स्टॉप = (i + 1) * कार्योंप्रतिथ्रेड; डेटा- & gt; प्रारंभ = प्रारंभ; डेटा- & gt; स्टॉप = स्टॉप; अगर (रोक & gt; ARRAYSIZE) {stop = ARRAYSIZE; } वर्गर (डेटा); } के लिए (i = 0; i & lt; ARRAYSIZE; i ++) {printf ("% d \ n", i); } वापसी 0; }  

और किसी कारण के लिए मुझे त्रुटि संदेश zsh: abort ./thread मुझे चलाने के समय के लिए। अजीब बात यह है कि जब तक सरणी पूरी तरह से मुद्रित नहीं हुई है, तब तक इसे रद्द नहीं किया जाता है? मुझे समझ में नहीं आ रहा है कि ऐसा क्यों है, निश्चित रूप से यह सब कुछ निष्पादित करने के बाद सीमा से बाहर की स्मृति तक नहीं पहुंच सकता है? ध्यान दें कि मूल रूप से printf लूप सरणी वस्तुओं को मुद्रित किया था लेकिन मैंने इसे बग जांच में बदल दिया और यह अभी भी मुझे एक ही रन टाइम त्रुटि दे रहा है

फ़ंक्शन में मुख्य , चर डेटा है आरंभिक नहीं हुआ जब भी आप इस वेरिएबल का उपयोग करते हैं तो आप सबसे अधिक संभावना मेमोरी एक्सेस उल्लंघन प्रदर्शन कर रहे हैं, इसलिए जो कुछ भी होता है वह बहुत "भाग्य की बात" है।

आपको इसे से शुरू करने :

  स्ट्रेट थ्रेडडेटा * डेटा = (स्ट्रेट थ्रेडडेटा *) मॉलोक (आकारओफ़ (स्ट्रेट थ्रेडडेटा)); ... नि: शुल्क (डेटा); // प्रोग्राम के अंत में  

एक अन्य विकल्प (इस मामले में एक बेहतर) इसके बजाय एक स्थैतिक आवंटित आवृत्ति का उपयोग करना है:

  struct थ्रेड डेटा डेटा; ... वर्गर (और डेटा);  

अब, आपके सरणी के साथ समस्या अनुक्रमण है।

बदलें:

  array [ I] i = i * i  

i i i BTW, मैं दृढ़ता से अनुशंसा करता हूं कि आप या तो int array [ARRAYSIZE] अंदर अपनी थ्रेडडेटा संरचना घोषित करें या इसे हर फ़ंक्शन में गतिशील रूप से आवंटित करें जो इसका उपयोग करता है संरचना ( सर सेटिंग के बजाय फ़ंक्शन मुख्य में एक स्थानीय सरणी को इंगित करने के लिए) हो जाएगा जैसे ही आप कई संरचनाओं में इस संरचना का प्रयोग शुरू करते हैं, तब समस्या बन जाएगी।


Comments

Popular posts from this blog

scala - Play Framework - how to bind form to a session field -

c++ - Why does Visual Studio Release build break on non-executing code line -

Firefox reacting to JQuery setTimeout that doesn't apply -