কোন নম্বর এই ফাংশন ক্রাশ করবে?


10

এক্স এবং ওয়াইয়ের কোন মানটি কিছু সি সংকলকগুলির সাথে ক্র্যাশ ঘটায়?

int f(int x, int y) {
    return (y==0) ? 0 : (x/y);
}

যেহেতু সি এর টেরিনারি অপারেটর শর্টকাট, তাই আমি বলব কোনওটি হবে না। এই প্রশ্নটি এই সাইটের জন্য ফর্ম্যাটটিকে ফিট করে না বলে মনে হচ্ছে, যা প্রোগ্রাম ধাঁধা এবং কোড গল্ফকে কেন্দ্র করে। বিস্তারিত জানার জন্য FAQ দেখুন codegolf.stackexchange.com/faq
স্টিভেন রাম্বালস্কি

এটি কোড গল্ফ নয়, ধাঁধা। একটি উত্তর আছে, এবং এটি সংখ্যা কয়েক মাত্র।
উগ্রোরেন

আমি সংশোধন করেছি.
স্টিভেন রাম্বালস্কি

2
আসলে, কেএন্ডআর বই দ্বারা বিচার করে, এই ফাংশনটি সত্যই কখনই ক্রাশ হবে না। তবে এএনএসআই সি স্ট্যান্ডার্ড অনুসারে, বিশেষ ক্র্যাশিং মামলায় আচরণটি পূর্বনির্ধারিত এবং x86 সংকলক সহ এটি ক্র্যাশ হয়ে যায়।
উগ্রোরেন

1
@ ডিএমকেকে, আপনি যদি সঠিক উত্তর দেন তবে আপনি বিজয়ী। এর চেয়ে বেশি স্পষ্ট ও উদ্দেশ্য হতে পারে কোন কবরস্থান? একটি মাত্র উত্তর আছে (বা আপনার কাছে অন্য কোনও উদাহরণ রয়েছে?)
উগোরেন

উত্তর:


7

-2147483648 (INT_MIN) এবং -1

#include <stdio.h>
#include <limits.h>
int f(int x, int y) {
    return (y==0) ? 0 : (x/y);
}
int main() {
    int r = f(INT_MIN, -1);
    printf("%d\n", r);
    return 0;
}

$ জিসিসি -ওয়াল বিভাগ। এবং & ./a.out # => zsh: ভাসমান পয়েন্ট ব্যতিক্রম / / a.out


প্রকৃতপক্ষে. যদিও এটি একটি সতর্কতা দেওয়া উচিত, কারণ 2147483648 বৈধ পূর্ণসংখ্যার নয়।
উগ্রোরেন

1
হ্যাঁ, এজন্য আমি কোনও বৈধ int ব্যবহার করতে INT_MIN ব্যবহার করেছি। আমি অনুমান করি কারণটি 2147483648 একটি বৈধ int নয়, যেহেতু INT_MAX 32-বিট ইনট সহ 2 ^ 31-1 হয়।
Eregon

আহ। দু'জনের পরিপূরক আমি সেটা মিস করেছি.
স্টিভেন রাম্বালস্কি

হ্যাঁ, এটি INT_MIN (যা -2147483648) দিয়ে পরিষ্কারভাবে সংকলন করা উচিত।
ugoren

3

সঠিক উত্তর ইতিমধ্যে দেওয়া হয়, কিন্তু আমি অবিলম্বে সম্পর্কে চিন্তা মাইক্রোসফট Pex

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

আপনার ধাঁধাটি স্যান্ডবক্স সাইটে যুক্ত করার পরে , এটি কয়েক সেকেন্ডের মধ্যে উত্তরটি খুঁজে পাবে, ইগ্রোন উত্তরের মতোই। (জিজ্ঞাসা জিজ্ঞাসা ক্লিক করুন)

দ্রষ্টব্য: এটি সি # তে এটি করে তবে ভাষাটি আসলে প্রাসঙ্গিক নয়।

  • x: int.MinValue
  • y: -1
  • ব্যতিক্রম: ওভারফ্লো এক্সেক্সশন
  • বার্তা: গাণিতিক অপারেশনের ফলে একটি ওভারফ্লো হয়েছিল।

1
খুশী হলাম। এটি অবশ্যই এটি নিষ্ঠুর করে তোলে না, কারণ এটি কয়েক সেকেন্ডের মধ্যেই শেষ হবে না। আমি অনুমান করি যে এমএস-এ থাকা কোনও ব্যক্তি বুঝতে পেরেছেন যে 0 এবং MAX_INT এর কাছাকাছি সংখ্যা সর্বদা আকর্ষণীয়।
উগ্রোরেন

আশা করি এর থেকে কিছুটা বেশি চালাক। এটি তাকান পারে (x/y)এবং যে জানেন INT_MIN, -1, 0ইত্যাদি যে অভিব্যক্তি জন্য সব সমস্যা ক্ষেত্রে, এবং একটি উপায় মূল্যায়ন করার সময় যারা মান উত্পাদন করতে রিভার্স ইঞ্জিনিয়ার করার চেষ্টা করুন।
ক্লাবহীন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.