EXC_BAD_ACCESS সিগন্যাল পেয়েছে


290

ডিভাইসে অ্যাপ্লিকেশন স্থাপন করার সময়, নিম্নলিখিত ত্রুটি সহ কয়েকটি চক্রের পরে প্রোগ্রামটি বন্ধ হবে:

Program received signal: "EXC_BAD_ACCESS".

আইফোন সিমুলেটরটিতে কোনও সমস্যা ছাড়াই প্রোগ্রামটি চলতে থাকে, এটি একবারে একবারে নির্দেশের মধ্য দিয়ে পদক্ষেপ নেওয়ার পরেও এটি ডিবাগ হবে এবং চলবে। এটি আবার চালানোর অনুমতি দেওয়ার সাথে সাথে আমি EXC_BAD_ACCESSসিগন্যালটি হিট করব ।

এই বিশেষ ক্ষেত্রে, এটি অ্যাক্সিলোমিটার কোডটিতে একটি ত্রুটি হতে পারে। এটি সিমুলেটারের মধ্যে কার্যকর করা হবে না, এজন্যই এটি কোনও ত্রুটি ফেলেনি। যাইহোক, এটি একবার ডিভাইসে নিযুক্ত কার্যকর করা হবে।

এই প্রশ্নের বেশিরভাগ উত্তর সাধারণ EXC_BAD_ACCESSত্রুটির সাথে ডিল করে , তাই আমি ভয়ঙ্কর ব্যাড অ্যাক্সেস ত্রুটির জন্য ক্যাচ-অল হিসাবে এই উন্মুক্ত রেখে দেব।

EXC_BAD_ACCESSএকটি অবৈধ মেমরি অ্যাক্সেসের ফলস্বরূপ সাধারণত ছোঁড়া হয়। আপনি নীচের উত্তরগুলিতে আরও তথ্য পেতে পারেন।

আপনি কি এর EXC_BAD_ACCESSআগে সিগন্যালের মুখোমুখি হয়েছিলেন এবং কীভাবে আপনি এটি ব্যবহার করেছেন?

উত্তর:


196

আপনার বিবরণ থেকে আমার সন্দেহ হয় সবচেয়ে সম্ভবত ব্যাখ্যাটি হ'ল আপনার মেমরি পরিচালনায় আপনার কিছুটা ত্রুটি রয়েছে। আপনি বলেছিলেন আপনি কয়েক সপ্তাহ ধরে আইফোন বিকাশে কাজ করছেন, তবে আপনি সাধারণভাবে উদ্দেশ্য সি নিয়ে অভিজ্ঞ কিনা তা নয়। আপনি যদি অন্য কোনও পটভূমি থেকে এসে থাকেন তবে মেমরি পরিচালনার নিয়মগুলিকে সত্যিই অভ্যন্তরীণ করার আগে কিছুটা সময় নিতে পারে - যদি আপনি এটির কোনও বড় বক্তব্য না করেন।

মনে রাখবেন, বরাদ্দ ফাংশন থেকে আপনি যা কিছু পান (সাধারণত স্থির বরাদ্দ পদ্ধতি, তবে কয়েকটি অন্যান্য থাকে) বা একটি অনুলিপি পদ্ধতিও আপনার মেমরির মালিকানাধীন এবং আপনার হয়ে গেলে অবশ্যই তা ছেড়ে দিতে হবে।

তবে যদি আপনি কারখানার পদ্ধতিগুলি (যেমন ) সহ অন্য কিছু থেকে কিছু ফিরে পান [NSString stringWithFormat]তবে আপনার কাছে একটি অটোরিলেজ রেফারেন্স থাকবে, যার অর্থ এটি ভবিষ্যতে অন্য কোড দ্বারা কোনও সময়ে প্রকাশিত হতে পারে - সুতরাং এটি আপনার পক্ষে প্রয়োজন হলে জরুরী আপনি এটি ধরে রাখার তাৎক্ষণিক ক্রিয়াকলাপের বাইরে রাখুন। যদি আপনি এটি না করেন, আপনার এমুলেটর পরীক্ষার সময় আপনি মেমোরিটি ব্যবহার করার সময় বরাদ্দ রাখতে পারেন, বা প্রকাশিত হলেও কাকতালীয়ভাবে এখনও কার্যকর, আপনার এমুলেটর পরীক্ষার সময়, তবে ডিভাইসে চালিত হওয়ার সময় মুক্তি পাওয়ার সম্ভাবনা বেশি এবং অ্যাক্সেস ত্রুটি হিসাবে প্রদর্শিত হবে more

এই জিনিসগুলি নিখুঁত করার সর্বোত্তম উপায় এবং যাইহোক একটি ভাল ধারণা (কোনও আপাত সমস্যা না থাকলেও) হ'ল অ্যাপটি ইনস্ট্রুমেন্টস সরঞ্জামটিতে বিশেষত লিক্স বিকল্পটি চালানো with


2
আমার কাছে কিছু অ্যাক্সিলোমিটার স্যাম্পলিং কোড ছিল যা আমার অ্যাপ্লিকেশনটির পক্ষে অত্যাবশ্যক ছিল না, যা অপসারণের পরে, খারাপ অ্যাক্সেস ত্রুটি দূর করে। যা সিমুলেটরের একটি অ্যাকসিলোমিটার না বিবেচনা করে তা বোঝায়। আমি এটিকে উদ্ভট বলে মনে করি যে এই ত্রুটি সৃষ্টি করার আগে এক সপ্তাহের জন্য এই কোডটির অস্তিত্ব ছিল, ছোঁয়াচে ...
হেক্টর রামোস

আমি অবজেক্টিভ-সি-তে নতুন তাই আমার বেশিরভাগ সমস্যা স্মৃতি পরিচালনা থেকে উদ্ভূত হওয়া উচিত। সি ++ এর কয়েক বছর পরে, আমি বেশিরভাগ জাভা গত তিন বা চার বছর ধরে ব্যবহার করছি তাই আমি মেমরির পরিচালনায় মরিচা পেয়েছি। আপনার উত্তরের জন্য ধন্যবাদ!
হেক্টর রামোস

4
কোনও সমস্যা নেই - খুশি আপনি এটি স্থির করেছেন। মেমরি পরিচালনাটি শীর্ষস্থানীয় হওয়া খুব কঠিন নয় - আপনার কেবল নিয়মগুলি শিখতে এবং ভাল অভ্যাসে প্রবেশ করা উচিত তা নিশ্চিত করা দরকার।
ফিল্ডসওয়ার্ড

আমার যে সমস্যাটি হয়েছিল তা হ'ল আমি তৈরি স্ট্রিংগুলি (এবং এ জাতীয়) প্রকাশের ক্ষেত্রে খুব বেশি আক্রমণাত্মক হয়ে উঠছি। কী প্রকাশ করা উচিত এবং কখন হবে সে সম্পর্কে আমি এখনও 100% নিশ্চিত নই, তবে ফিলের উত্তর অবশ্যই সহায়তা করেছিল।
pluckyglen

আমি যদি সেটিকে সঠিকভাবে অনুসরণ করে থাকি তবে, সেমিক্লোহ, হ্যাঁ এটি করা ঠিক ছিল। অবজেক্টএটিআইএনডেক্স থেকে আপনি অবজেক্টের রিটার্নের মালিক নন।
ফিল্ডসওয়ার

101

EXC_BAD_ACCESS এর একটি প্রধান কারণ হ'ল প্রকাশিত অবজেক্টগুলিতে অ্যাক্সেস করার চেষ্টা করা।

এটি কীভাবে সমস্যা সমাধান করবেন তা জানতে, এই দস্তাবেজটি পড়ুন: ডিবাগিংআউটোরেলিজপুল

এমনকি আপনি যদি মনে করেন না যে আপনি "স্বতঃ-প্রকাশিত বস্তুগুলি মুক্তি দিচ্ছেন", এটি আপনার ক্ষেত্রে প্রযোজ্য।

এই পদ্ধতি অত্যন্ত ভাল কাজ করে। আমি এটি সর্বদা দুর্দান্ত সাফল্যের সাথে ব্যবহার করি !!

সংক্ষেপে, এটি ব্যাখ্যা করে যে কীভাবে কোকো'র এনএস জোম্বি ডিবাগিং ক্লাস এবং কমান্ড লাইন "malloc_history" সরঞ্জামটি ব্যবহার করতে হবে ঠিক কী কোড প্রকাশিত বস্তুটি আপনার কোডটিতে অ্যাক্সেস করেছে।

সাইড নোট:

ইনস্ট্রুমেন্টগুলি চালানো এবং ফাঁসের জন্য পরীক্ষা করা EXC_BAD_ACCESS এর সমস্যা সমাধানে সহায়তা করবে না। আমি নিশ্চিত যে মেমরি ফাঁসের EXC_BAD_ACCESS এর সাথে কোনও সম্পর্ক নেই। ফাঁসের সংজ্ঞা এমন একটি বস্তু যা আপনার আর অ্যাক্সেস করতে পারে না এবং তাই আপনি এটি কল করতে পারবেন না।

আপডেট: আমি এখন লিকগুলি ডিবাগ করার জন্য যন্ত্রপাতি ব্যবহার করি। এক্সকোড ৪.২ থেকে, পণ্য-> প্রোফাইল চয়ন করুন এবং যখন ইনস্ট্রুমেন্টস চালু হয়, তখন "জম্বি" নির্বাচন করুন।


18
এই সিডনোট খুব গুরুত্বপূর্ণ। ফুটো EXC_BAD_ACCESS তৈরি করতে পারে না (তাদের অন্যান্য সমস্যা আছে)। আমি এটি লিখেছিলাম EXC_BAD_ACCESS loufranco.com/blog/files/Unders
লু ফ্রাঙ্কো

4
এক্সকোডের সেই জম্বিগুলির সরঞ্জামটি দুর্দান্ত! আমি অপরাধীকে 3 মিনিটে নয় মিনিটে খুঁজে পেয়েছি।
আরম কোচার্যান

1
উত্তরের উপরের লিঙ্কটি পাওয়া যায় না। 404 ত্রুটি পাওয়া যায় না দেখায়।
তেজাস

12

একটি EXC_BAD_ACCESS সিগন্যাল একটি সিস্টেম কলে একটি অবৈধ পয়েন্টার পাস করার ফলাফল। ওএস এক্স-তে একটি পরীক্ষা প্রোগ্রামের সাথে আমি আজ খুব আগে পেয়েছি - আমি একটি অবিচ্ছিন্ন ভেরিয়েবলটি দিয়ে যাচ্ছিলাম pthread_join()যা পূর্ববর্তী টাইপের কারণে হয়েছিল।

আমি আইফোন বিকাশের সাথে পরিচিত নই, তবে আপনি আপনার সমস্ত বাফার পয়েন্টারগুলি ডাবল-চেক করতে হবে যে আপনি সিস্টেম কলগুলিতে যাচ্ছেন। আপনার সংকলকটির সতর্কতা স্তরটি সমস্তভাবে ক্র্যাঙ্ক করুন (জিসিসি সহ, বিকল্পগুলি -Wallএবং -Wextraবিকল্পগুলি ব্যবহার করুন)। সিমুলেটর / ডিবাগারে যতটা সম্ভব ডায়াগনস্টিকস সক্ষম করুন।


8

আমার অভিজ্ঞতায়, এটি সাধারণত একটি অবৈধ মেমরি অ্যাক্সেসের কারণে ঘটে। সমস্ত পয়েন্টার, বিশেষত অবজেক্ট পয়েন্টারগুলি পরীক্ষা করে দেখুন যে সেগুলি আরম্ভ করা হয়েছে। আপনার মেইনওয়াইন্ডো.এক্সিব ফাইলটি, যদি আপনি একটি ব্যবহার করেন তবে সমস্ত প্রয়োজনীয় সংযোগ সহ সঠিকভাবে সেট আপ করা হয়েছে তা নিশ্চিত করুন।

যদি সেই অন-পেপার চেকিংয়ে কোনও কিছুই আপ না হয়ে থাকে এবং একক পদক্ষেপ নেওয়ার সময় এটি ঘটে না, এনএসএলগ () বিবৃতি দিয়ে ত্রুটিটি সনাক্ত করার চেষ্টা করুন: আপনার কোডটি তাদের সাথে ছিটিয়ে দিন, যতক্ষণ না আপনি লাইনটি বিচ্ছিন্ন করে দিচ্ছেন ততক্ষণ এগুলিকে সরিয়ে ফেলুন around ভূল. তারপরে সেই লাইনে একটি ব্রেকপয়েন্ট নির্ধারণ করুন এবং আপনার প্রোগ্রামটি চালান। আপনি ব্রেকআপপয়েন্টে আঘাত করলে, সমস্ত ভেরিয়েবলগুলি এবং সেগুলির মধ্যে থাকা বস্তুগুলি পরীক্ষা করে দেখুন, কোনও কিছু আপনার প্রত্যাশার মতো না দেখায়। আমি বিশেষত এমন ভেরিয়েবলগুলির জন্য নজর রাখব যার অবজেক্ট শ্রেণি এমন কিছু যা আপনি প্রত্যাশা করেননি। যদি কোনও ভেরিয়েবলটিতে একটি ইউআইওয়াইন্ডো থাকে তবে এর পরিবর্তে এটিতে একটি এনএসএনটিফিকেশন রয়েছে, যখন ডিবাগারটি কাজ না করা হচ্ছে তখন একই অন্তর্নিহিত কোড ত্রুটি নিজেকে অন্যভাবে প্রকাশ করতে পারে।


7

আমি মাত্র একটি এক্সসি_বিএডি_এসিসিএস ট্র্যাক করতে কয়েক ঘন্টা ব্যয় করেছি এবং এনএসবিম্বিস এবং অন্যান্য এনভির ভার্সগুলি আমাকে কিছুই বলে মনে হচ্ছে না।

আমার জন্য, এটি ফর্ম্যাট স্পেসিফায়ারগুলির সাথে একটি বোকামি এনএসলগ বিবৃতি ছিল কিন্তু কোনও আরগস পাস হয়নি।

NSLog(@"Some silly log message %@-%@");

দ্বারা স্থির

NSLog(@"Some silly log message %@-%@", someObj1, someObj2);

6

২০১০ ডাব্লুডাব্লুডিসি ভিডিওগুলি অ্যাপল বিকাশকারী প্রোগ্রামের যে কোনও অংশীদারদের জন্য উপলব্ধ। একটি দুর্দান্ত ভিডিও রয়েছে: "সেশন 311 - ইনস্ট্রুমেন্টস সহ অ্যাডভান্সড মেমরি অ্যানালাইসিস" যা যন্ত্রগুলিতে জম্বি ব্যবহার এবং অন্যান্য স্মৃতি সমস্যার ডিবাগ করার কয়েকটি উদাহরণ দেখায়।

লগইন পৃষ্ঠায় একটি লিঙ্কের জন্য এখানে ক্লিক করুন


6

একটি সম্পূর্ণ উত্তর নয়, তবে একটি নির্দিষ্ট পরিস্থিতি যেখানে আমি পেয়েছি তা হ'ল 'মারা গিয়েছিল' এমন কোনও অ্যাক্সেসের চেষ্টা করার কারণ আমি স্বতঃপরিচয় ব্যবহার করার চেষ্টা করেছি:

netObjectDefinedInMyHeader = [[[MyNetObject alloc] init] autorelease];

সুতরাং উদাহরণস্বরূপ, আমি আসলে এটি 'অবহিত' হিসাবে একটি বিষয় হিসাবে পাস করছিলাম (এটি শ্রোতা, পর্যবেক্ষক, আপনার পছন্দমতো যাই হোক না কেন প্রবন্ধ হিসাবে চিহ্নিত করুন) তবে বিজ্ঞপ্তিটি পাঠানোর পরে এটি ইতিমধ্যে মারা গিয়েছিল এবং আমি এক্সসি_ব্যাড_এসিসিএসএস পেয়েছি get এটিকে পরিবর্তন করা [[MyNetObject alloc] init]এবং যথাযথ হিসাবে পরে এটিকে ত্রুটি সমাধানের সমাধান করা।

এর কারণ হওয়ার অন্য কারণ হ'ল উদাহরণস্বরূপ আপনি যদি কোনও বস্তুতে পাস করে এটি সংরক্ষণ করার চেষ্টা করেন:

myObjectDefinedInHeader = aParameterObjectPassedIn;

পরে আমারঅবজেক্ট ডেফাইনডইনহাইডার অ্যাক্সেস করার চেষ্টা করার সময় আপনি সমস্যায় পড়তে পারেন। ব্যবহার:

myObjectDefinedInHeader = [aParameterObjectPassedIn retain];

আপনার যা প্রয়োজন তা হতে পারে। অবশ্যই আমি যা দৌড়েছি তার কয়েকটি উদাহরণ এবং এর অন্যান্য কারণও রয়েছে তবে এগুলি অধরা প্রমাণ করতে পারে তাই আমি তাদের উল্লেখ করেছি। শুভকামনা!


5

এটি ঘটতে পারে যেখানে কেবল অন্য পরিস্থিতি যুক্ত করতে:

আমার কোডটি ছিল:

NSMutableString *string;
[string   appendWithFormat:@"foo"];

স্পষ্টতই আমি স্ট্রিংয়ের জন্য মেমরি বরাদ্দ করতে ভুলে গিয়েছিলাম:

NSMutableString *string = [[NSMutableString alloc] init];
[string   appendWithFormat:@"foo"];

সমস্যা সমাধান করে।


এটি আমার জন্য কোনও ত্রুটি সৃষ্টি করে না কারণ স্ট্রিং শূন্যের সূচনা হয় এবং শূন্যপদে কোনও পদ্ধতি কল করে নাল অবজেক্ট প্যাটার্নটি ব্যবহার করে কিছুই হয় না।
লিরন ইয়াহদাভ

5

EXC_BAD_ACCESS ব্যতিক্রম হওয়ার আগে তাদের ধরার জন্য আর একটি পদ্ধতি হ'ল এক্সকোড 4+ এর স্থির বিশ্লেষক

পণ্য> বিশ্লেষণ (শিফট + সেন্টিমিটার + বি) দিয়ে স্ট্যাটিক বিশ্লেষক চালান। বিশ্লেষক দ্বারা উত্পন্ন কোনও বার্তায় ক্লিক করা আপত্তিজনক বস্তুর ধরে রাখা / প্রকাশের ক্রম দেখায় আপনার উত্সে একটি চিত্র চিত্রিত করে over

এখানে চিত্র বর্ণনা লিখুন


5

আমি اعتراض / এক্সসেপশন_থ্রোতে একটি ব্রেকপয়েন্ট নির্ধারণ করা দরকারী বলে মনে করি। আপনি যখন EXC_BAD_ACCESS পান তখন এই ডিবাগারটি ভাঙ্গা উচিত।

নির্দেশগুলি এখানে ডিবাগিংটেকনিকগুলি পাওয়া যাবে


4

"আপনি যদি এটি বরাদ্দ না করেন বা ধরে রাখেন না, এটি ছেড়ে দেবেন না" এর সরল নিয়মটি ব্যবহার করুন।


1
"... এটি অনুলিপি করুন ..." দ্বারা এই নিয়মটি প্রসারিত করুন এবং আপনার ভাল হওয়া উচিত।
পর্যন্ত

4

EXC_BAD_ACCESS কীভাবে ডিবাগ করবেন

উপরের লিঙ্কটি দেখুন এবং এটি যেমনটি বলেছেন তেমনি করুন .... NSZombies ব্যবহারের জন্য কিছু দ্রুত নির্দেশাবলী

অ্যাপ্লিকেশনটি চালান এবং এটি ব্যর্থ হওয়ার পরে ("EXC_BAD_ACCESS" এর পরিবর্তে "বাধা" প্রদর্শন করা উচিত ... কনসোলটি পরীক্ষা করুন (রান> কনসোল) সেখানে এখন একটি বার্তা থাকা উচিত যাতে এটি কী অ্যাক্সেসটি ব্যবহার করার চেষ্টা করছে তা জানিয়ে দেওয়া উচিত)

-Ben


3

আমি গত চার ঘন্টা ধরে এই ত্রুটিটি সমাধান করার জন্য ডিবাগ করছি এবং কোডটি রিফ্যাক্টরিং করছি। উপরের একটি পোস্ট আমাকে সমস্যাটি দেখাতে পরিচালিত করেছিল:

সম্পত্তি আগে: সূচনা পয়েন্ট = [[ডেটাপয়েন্ট বরাদ্দ] init]; শুরুর পয়েন্ট = [ডেটাপয়েন্টলিস্ট অবজেক্টঅ্যান্টেক্স: 0];
। । । x = startPoint.x - 10; // EXC_BAD_ACCESS

সম্পত্তি পরে: সূচনা পয়েন্ট = [[ডেটাপয়েন্ট বরাদ্দ] init]; শুরুর পয়েন্ট = [[ডাটাপয়েন্টলিস্ট অবজেক্টএটিআইডেক্স: 0] ধরে রাখুন];

বিদায় EXC_BAD_ACCESS


আমিও তেমনি ভুল করেছি। আমি উদাহরণটি পুনরায় পেতে ভুলে গিয়েছিলাম যার ফলে ক্রাশ হয়েছিল এবং আমি এটি বের করতে কয়েক ঘন্টা ব্যয় করেছি। আপনার অভিজ্ঞতা আমাকে খুঁজে আমার আলোকিত। ধন্যবাদ!
ডেভিড.চু.সিএ

3

আশা করি আপনি শেষ হয়ে গেলে 'স্ট্রিং' প্রকাশ করছেন!


3

আমি একটি ডিআইডি-পদ্ধতিতে নিজেকে ফিরে যেতে ভুলে গেছি ...;)


এটি একটি সংকলন সময় সতর্কতা / ত্রুটি হওয়া উচিত এবং রানটাইমের সময় কোনও EXC_BAD_ACCESS নয়।
স্টিগি

3

এটি একটি দুর্দান্ত থ্রেড। এখানে আমার অভিজ্ঞতা: আমি কোনও সম্পত্তির ঘোষণায় কীওয়ার্ডটি ধরে রাখতে / বরাদ্দ করতে গণ্ডগোল করেছি। বলেছিলাম:

@property (nonatomic, assign) IBOutlet UISegmentedControl *choicesControl;
@property (nonatomic, assign) IBOutlet UISwitch *africaSwitch;
@property (nonatomic, assign) IBOutlet UISwitch *asiaSwitch;

যেখানে আমার বলা উচিত ছিল

@property (nonatomic, retain) IBOutlet UISegmentedControl *choicesControl;
@property (nonatomic, retain) IBOutlet UISwitch *africaSwitch;
@property (nonatomic, retain) IBOutlet UISwitch *asiaSwitch;

1
আজব, আপনার আইবিউটলেট ধরে রাখতে হবে কেন? তাদের পরিচালনা স্বয়ংক্রিয়ভাবে আপনার জন্য করা হয়।
jv42

3

আমি কেবলমাত্র একটি বড় পদ্ধতিতে অন্তর্ভুক্ত একটি সি পদ্ধতি চালানোর চেষ্টা করার সময় আইফোনে EXC_BAD_ACCESS এর মুখোমুখি হয়েছি। সিমুলেটরটি কোড চালানোর জন্য আমাকে যথেষ্ট মেমরি দিতে সক্ষম হয়েছিল, তবে ডিভাইসটি নয় (অ্যারেটি মিলিয়ন অক্ষর ছিল, সুতরাং এটি অত্যধিক বাজে ছিল!)।

EXC_BAD_ACCESS পদ্ধতির প্রবেশের ঠিক পরে এসেছিল এবং বেশ কিছুক্ষণ আমাকে বিভ্রান্ত করেছিল কারণ এটি অ্যারে ঘোষণার কাছাকাছি ছিল না।

আমার ঘন্টার কয়েক ঘন্টা চুল টানতে অন্য কেউ উপকৃত হতে পারে।


3

এর থেকে একটি বরাদ্দ না করা পয়েন্টারটি নিতে ভুলে গেছেন dealloc। আমি একটি ইউআইএনএভিগেশন কন্ট্রোলারের আমার রুটভিউতে এক্স_আড_অ্যাক্সেস পাচ্ছিলাম তবে কেবল কখনও কখনও। আমি ধরে নিয়েছি সমস্যাটি রুটভিউতে রয়েছে কারণ এটি এর ভিউডিডি অ্যাপিয়ার half through এর মধ্য দিয়ে অর্ধেকের দিকে ক্র্যাশ হয়ে গেছে} খারাপ ডেলোক}} রিলিজের সাথে আমি দৃশ্যটি পপ করার পরে এটি ঘটেছে এবং এটিই ছিল!

"EXC_BAD_ACCESS" [প্রক্রিয়াতে স্যুইচিং 330] এখন প্রোগ্রামে কোনও মেমরি উপলব্ধ নেই: মলোককে কল করা অনিরাপদ

আমি ভেবেছিলাম যে সমস্যাটি যেখানে আমি বরাদ্দ দেওয়ার চেষ্টা করছিলাম ... যেখানে আমি বরাদ্দ ছাড়াই ছাড়ার চেষ্টা করছিলাম না, ডি'ও!


3

আমি কীভাবে EXC_BAD_ACCESS ব্যবহার করব

কখনও কখনও আমি অনুভব করি যে কোনও EXC_BAD_ACCESS ত্রুটিটি যখন এক্সকোড নিক্ষেপ করা হয় তখন মেইন.এম শ্রেণিতে ত্রুটিটি প্রদর্শিত হবে যেখানে ক্রাশটি ঘটেছিল তার কোনও অতিরিক্ত তথ্য দেওয়া হয়নি (কখনও কখনও)।

সেই সময়গুলিতে আমরা এক্সকোডে একটি ব্যতিক্রমী ব্রেকপয়েন্ট সেট করতে পারি যাতে ব্যতিক্রম ধরা পড়লে একটি ব্রেকপয়েন্ট স্থাপন করা হবে এবং সরাসরি সেই ব্যবহারকারীকে ঘনিষ্ঠভাবে জানানো হবে যে ক্র্যাশটি সেই লাইনে ঘটেছে

এখানে চিত্র বর্ণনা লিখুন


2

NSAssert () পদ্ধতি প্যারামিটারগুলি যাচাই করার জন্য কলগুলি ট্র্যাক ডাউন এবং পাশাপাশি নীলগুলি এড়ানো এড়াতে বেশ কার্যকর।


2

আমার সবেমাত্র এই সমস্যা ছিল আমার জন্য কারণটি কোরেডাটা পরিচালিত অবজেক্টগুলি অন্য কোনও স্থান থেকে পরে এটি পড়ার চেষ্টা করছে তা মুছছিল।


2

আমি গত চার ঘন্টা ধরে এই ত্রুটিটি সমাধান করার জন্য ডিবাগ করছি এবং কোডটি রিফ্যাক্টরিং করছি। উপরের একটি পোস্ট আমাকে সমস্যাটি দেখাতে পরিচালিত করেছিল:

সম্পত্তি আগে:

startPoint = [[DataPoint alloc] init] ;
startPoint= [DataPointList objectAtIndex: 0];
x = startPoint.x - 10; // EXC_BAD_ACCESS

সম্পত্তি পরে:

startPoint = [[DataPoint alloc] init] ;
startPoint = [[DataPointList objectAtIndex: 0] retain];

বিদায় EXC_BAD_ACCESS

আপনার উত্তরের জন্য আপনাকে অনেক ধন্যবাদ। আমি এই সমস্যা নিয়ে সারা দিন লড়াই করে যাচ্ছি। তুমি অসাধারণ!


4
আপনি কি কেবল তাত্ক্ষণিক স্টার্টপয়েন্টটি ওভাররাইট করছেন না? আমি মনে করি না যে আপনার প্রথম লাইনের দরকার নেই।
toxaq

2
আপনি যদি তাত্ক্ষণিকভাবে এটির সাথে অন্যটির সাথে ওভাররাইট করতে যাচ্ছেন তবে কোনও ভেরিয়েবল বরাদ্দকরণ এবং আরম্ভ করার দরকার নেই। আপনি প্রথম অ্যাসাইনমেন্টে কেবল অবজেক্টটি ফাঁস করছেন।
স্বপ্নাঠেক

2

শুধু যোগ করতে

লিন্ডা ডট কমের একটি দুর্দান্ত ডিভিডি রয়েছে

আইফোন এসডিকে প্রয়োজনীয় প্রশিক্ষণ

এবং অধ্যায় 6, পাঠ 3 হ'ল EXEC_BAD_ACCESS এবং জম্বিগুলির সাথে কাজ করা।

আমার পক্ষে এটি বোঝার জন্য দুর্দান্ত ছিল, কেবল ত্রুটি কোড নয় তবে আমি কীভাবে মুক্তি পেলামটির বিষয়ে আরও তথ্য পেতে জম্বিগুলি ব্যবহার করতে পারি।


2

ত্রুটিটি কী হতে পারে তা যাচাই করতে

NSZombieEnabled ব্যবহার করুন।

আপনার আবেদনে NSZombieEnabled সুবিধাটি সক্রিয় করতে:

নির্বাহযোগ্য তথ্য উইন্ডোটি খোলার জন্য প্রকল্প> সক্রিয় সম্পাদনা সম্পাদনা করুন চয়ন করুন। যুক্তি ক্লিক করুন। "পরিবেশে সেট করতে ভেরিয়েবল" বিভাগে অ্যাড (+) বোতামটি ক্লিক করুন। নাম কলামে NSZombieEn सक्षम এবং মান কলামে YES লিখুন। নিশ্চিত হয়ে নিন যে এনএসজেম্বিএনেবলড এন্ট্রিটির জন্য চেকমার্কটি নির্বাচিত হয়েছে।

আমি এই উত্তরটি আইফোনএসডিকে পেয়েছি


2

আমি বুঝতে পারি যে এটি সম্পর্কে কিছু আগে জিজ্ঞাসা করা হয়েছিল, তবে এই থ্রেডটি পড়ার পরে, আমি এক্সকোড ৪.২ এর জন্য সমাধানটি পেয়েছি: পণ্য -> স্কিম সম্পাদনা করুন -> ডায়াগনস্টিক ট্যাব -> জুম্বু অবজেক্ট সক্ষম করুন

একটি ডিওলোকটেড অবজেক্টে একটি বার্তা প্রেরণে আমাকে খুঁজে পেতে সহায়তা করেছে।


2

যখন আপনার অসীম পুনরাবৃত্তি হয়, আমি মনে করি আপনারও এই ত্রুটি থাকতে পারে। এটা আমার জন্য একটি কেস ছিল।


1

এমনকি আরেকটি সম্ভাবনা: কাতারে ব্লক ব্যবহার করে, সহজেই ঘটে যেতে পারে যে আপনি অন্য কাতারে কোনও অবজেক্ট অ্যাক্সেস করার চেষ্টা করেছেন, যা ইতিমধ্যে এই সময়ে ডি-বরাদ্দ করা হয়েছে। সাধারণত আপনি যখন জিইউআইতে কিছু প্রেরণের চেষ্টা করেন। যদি আপনার ব্যতিক্রম ব্রেক ব্রেকপয়েন্টটি কোনও অদ্ভুত স্থানে সেট করা থাকে, তবে এটির কারণ হতে পারে।


1

আমি পেয়েছি কারণ আমি সঠিক [self performSegueWithIdentifier:sender:]এবং -(void) prepareForSegue:(UIstoryboardSegue *)সঠিকভাবে ব্যবহার করছিলাম না


1

@স্ট্রিং তৈরি করার সময় প্রতীকটি ভুলে যাবেন না কারণ C-stringsহিসাবে আচরণ NSStringsকরবে EXC_BAD_ACCESS

এটা ব্যবহার কর:

@"Some String"

বরং এই তুলনায়:

"Some String"

পিএস - সাধারণত যখন arrayপ্রচুর রেকর্ড সহ কোনও সামগ্রীতে পপুলেট হয়।


1

এক্সকোড 4 এবং তারপরের, এটি ইনস্ট্রুমেন্টগুলির সাহায্যে সত্যই সহজ করা হয়েছে। ইনস্ট্রুমেন্টগুলিতে স্রেফ জম্বি চালান। এই টিউটোরিয়ালটি এটি ভালভাবে ব্যাখ্যা করেছে: exc_bad_access ত্রুটি এক্সকোড যন্ত্রগুলি ডিবাগ করা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.