নাল পয়েন্টার ব্যতিক্রম নিক্ষেপ করুন [বন্ধ]


14

আপনার কাজটি নাল পয়েন্টার ব্যতিক্রম উত্পন্ন করা। এটি হ'ল, আপনার প্রোগ্রামকে অবশ্যই এমন কোনও মান গ্রহণ করতে হবে যা এটি নন-শূন্য হওয়ার প্রত্যাশা করে এবং একটি ব্যতিক্রম / ত্রুটি বা ক্র্যাশ ফেলে দেয় কারণ মানটি শূন্য হয়।

তদ্ব্যতীত, কোডটি পড়ে এটি স্পষ্ট হতে পারে না যে মানটি নাল। আপনার লক্ষ্যটি পাঠকের কাছে এটিকে স্পষ্ট করে দেখাতে হবে যে মানটি যদিও বাস্তবে রয়েছে তবুও এটি নাল নয়।

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

এটি জনপ্রিয়তার প্রতিযোগিতা, তাই চালাক হোন!


@ অরৌস আপনি কী বোঝাতে চেয়েছেন আপনি একটি উদাহরণ দিতে পারেন?
Ypnypn

এটি দেখার পরে, আপনি যা খুঁজছেন তার চেয়ে এটি কাস্ট ত্রুটি বেশি।
12urous

আমাকে কি একটি সংকলক বাগ ব্যবহার করার অনুমতি দেওয়া হচ্ছে?
চিহ্নিত করুন

1
@ মার্ক এটি একটি জনপ্রিয়তা প্রতিযোগিতা; সম্প্রদায় সিদ্ধান্ত নিতে দিন। আমি অবশ্যই একটি সংকলক বাগের জন্য ভোট দেব।
11684

উত্তর:


33

জাভা

আসুন একটি সংখ্যার পরম মান গণনা করি। জাভা এই উদ্দেশ্যে Math.abs রয়েছে, তবে আমরা যে সংখ্যাটি ব্যবহার করছি তা কখনও কখনও নালাম হতে পারে। সুতরাং এই ক্ষেত্রে মোকাবেলা করার জন্য আমাদের একটি সহায়ক পদ্ধতি প্রয়োজন:

public class NPE {
    public static Integer abs(final Integer x) {
        return x == null ? x : Math.abs(x);
    }

    public static void main(final String... args) {
        System.out.println(abs(null));
    }
}

যদি এক্স নাল হয়, নালটি ফিরুন, অন্যথায় ম্যাথ.এবস () ব্যবহার করুন।
কোডটি খুব সহজ এবং পরিষ্কার, এবং ঠিকঠাক কাজ করা উচিত ...?

যাইহোক, পরিবর্তে এই লাইনটি ব্যবহার করে:

return x == null ? null : Math.abs(x);

সঠিকভাবে কাজ করে। আমি এটিকে একটি স্পয়লার হিসাবে তৈরি করার কথা ভেবেছিলাম, তবে .. আমি মনে করি এটি ঠিক ততটাই বিস্মৃত হয় :)

ঠিক আছে, একটি ব্যাখ্যা:

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

এখন এক বিস্ময়কর অংশ: যখন ত্রৈমাসিক অপারেটর (? :) 2 টি এক্সপ্রেশন নিয়ে ডিল করতে হয় যেখানে একটিতে আদিম ধরণের থাকে এবং অন্যটির সাথে তার সম্পর্কিত বর্গ থাকে (যেমন int এবং পূর্ণসংখ্যা) তখন জাভা আদিমকে রূপান্তরিত করবে এমন প্রত্যাশা করতে পারে শ্রেণিতে (ওরফে "বক্সিং"), বিশেষত যখন এটির ধরণের প্রয়োজন (পদ্ধতি থেকে ফিরে আসার জন্য) তা হল রেফারেন্স (শ্রেণি) প্রকার, এবং প্রথম প্রকাশটিও রেফারেন্স টাইপের হয়। তবে জাভা একেবারে বিপরীত কাজ করে: এটি রেফারেন্স টাইপকে আদিম ধরণের রূপান্তর করে (ওরফে "আনবক্সিং")। সুতরাং আমাদের ক্ষেত্রে, এটি এক্স ইনকে রূপান্তর করার চেষ্টা করবে, তবে কোনটি নাল হতে পারে না, সুতরাং এটি একটি এনপিই নিক্ষেপ করে।

আপনি যদি এই কোডটি Eclipse ব্যবহার করে সংকলন করেন, আপনি আসলে একটি সতর্কতা পাবেন: "নাল পয়েন্টার অ্যাক্সেস: ধরণের পূর্ণসংখ্যার এই অভিব্যক্তিটি নাল তবে অটো-আনবক্সিংয়ের প্রয়োজন"


/programming/7811608/java-npe-in-ternary-operator-with-autoboxing
/programming/12763983/nullpointerexception-through-auto-boxing-behavior-of-java -ternary-অপারেটর



স্পোলার্স x! = নাল হয়ে গেলে কী হয়? (আমি এটি ইতিমধ্যে খুঁজে
পেয়েছি

@ 11684 যখন এক্স নাল নয়, এটি ঠিক কাজ করে
অডিটসু ছাড়ুন কারণ এসই ইভিল

তারপরে আমি মনে করি এটি কীভাবে কাজ করে তা আমি জানি না। যদি এক্সটি শূন্য না হয় এবং এটি কেন ছুঁড়ে যায় সে সম্পর্কে আমি সঠিকভাবে কাজ করি তবে কোলনটিকে দুটি ইন্দ্রিয়তে পার্স করা উচিত (যা আমি কোনও ভাষা স্পেসিফিকেশন এ দেব না)।
11684

@ 11684 আপনি "দুটি জ্ঞান" সম্পর্কে কী বোঝেন তা নিশ্চিত নন, তবে যাইহোক আমি এখনই একটি ব্যাখ্যা যুক্ত করেছি
অদিতসু ছাড়ুন কারণ এসই ইভিল

23

সি

প্রতিটি সি প্রোগ্রামার কমপক্ষে একবার এই ত্রুটি করেছে।

#include <stdio.h>

int main(void) {
    int n=0;
    printf("Type a number : ");
    scanf("%d",n);
    printf("Next number is : %d",n+1);
    return 0;
}

কারণ:

scanfint *আর্গুমেন্টে একটি পয়েন্টার ( ) নেয় , এখানে 0পাস হয়েছে (নুল-পয়েন্টার)

ফিক্স:

scanf("%d",&n);

http://ideone.com/MbQhMM


1
এটি ঠিক এর মতো নয়। scanfএটি একটি বৈকল্পিক ফাংশন, এবং intপ্রত্যাশিত হলে ভুল প্রকারের ( ) যুক্তি দেওয়া হয়েছিল int *। যেহেতু সি (আমি জানি, সংকলকরা ক্ষেত্রে এটি সনাক্ত করতে পারে scanf) বৈকল্পিক ফাংশনের প্রকারগুলি পরীক্ষা করতে পারে না, এটি আনন্দের সাথে সংকলন করে। 0প্রকৃতপক্ষে নাল পয়েন্টার আক্ষরিক, তবে এটি কেবলমাত্র ব্যবহৃত আক্ষরিক ক্ষেত্রেই প্রয়োগ হয়, এটি কোনও ভেরিয়েবলের মধ্যে সংরক্ষণ না করেই। nকোনও নাল পয়েন্টার থাকে না
কনরাড বোরোস্কি

এই ফাংশনটি ঠিক করতে আপনাকে স্ক্যানফের রিটার্ন মানটিও পরীক্ষা করতে হবে।
ডেভিড গ্রেসন

1
@David এটা ফেরত মান পরীক্ষণ ছাড়া সঠিক নয়, কিন্তু এটি বিপর্যস্ত করবে না বা UB ডাকা - (। এই ঘটতে, stdin হিসাবে একটি খালি ফাইল পুনঃনির্দেশিত চেষ্টা দেখার জন্য) এন 0 এ থাকবে
Riking

14

পিএইচপি

এই আমাকে কয়েকবার কামড় দিয়েছে।

<?php

class Foo {
  private $bar;

  function init() {
    $this->bar = new Bar();
  }

  function foo() {
    $this->bar->display_greeting(); // Line 11
  }
}

class Bar {
  function display_greeting() {
    echo "Hello, World!";
  }
}

$foo_instance = new Foo();
$foo_instance->init();
$foo_instance->foo();

প্রত্যাশিত ফলাফল:

Hello, World!

আসল ফলাফল:

Fatal error: Call to a member function display_greeting() on a non-object on line 11

ওরফে নালপয়েন্টার এক্সসেপশন

কারণ:

ডিফল্টরূপে, কনস্ট্রাক্টর সিনট্যাক্স পিএইচপি ৪.x এর সাথে পিছনের দিকে সামঞ্জস্যপূর্ণ এবং যেমন ফাংশনটি fooশ্রেণীর জন্য একটি বৈধ কনস্ট্রাক্টর Fooএবং এইভাবে ডিফল্ট খালি কনস্ট্রাক্টরকে ওভাররাইড করে। আপনার প্রকল্পে নাম স্থান যুক্ত করে এই ধরণের ত্রুটি এড়ানো যায়।


9

কফিস্ক্রিপ্ট (নোড.জেএস এ)

কফিস্ক্রিপ্টে, ?অস্তিত্বহীন অপারেটর। যদি ভেরিয়েবলটি বিদ্যমান থাকে তবে এটি ব্যবহৃত হয়, অন্যথায় ডানদিকে ব্যবহার করা হচ্ছে। আমরা সকলেই জানি যে পোর্টেবল প্রোগ্রামগুলি লেখা শক্ত। ক্ষেত্রে জাভাস্ক্রিপ্ট মুদ্রণ নির্দিষ্ট অধীন। ব্রাউজারগুলি alert(বা document.write), স্পাইডারমনকি শেল ব্যবহার করে printএবং নোড.জেএস ব্যবহার করে console.log। এটি পাগল, তবে কফিস্ক্রিপ্ট এই সমস্যাটিতে সহায়তা করে।

# Portable printer of "Hello, world!" for CoffeeScript

printingFunction = alert ? print ? console.log
printingFunction "Hello, world!"

আসুন এটি নোড.জেএস এর অধীনে চালানো যাক। সর্বোপরি, আমরা আমাদের স্ক্রিপ্টটি কাজ করে তা নিশ্চিত করতে চাই।

ReferenceError: print is not defined
  at Object.<anonymous> (printer.coffee:3:1)
  at Object.<anonymous> (printer.coffee:3:1)
  at Module._compile (module.js:456:26)

আহ, আপনি কেন অভিযোগ করবেন, যখন alertসংজ্ঞায়িত করা হয়নি?

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


8

চুনি

একটি ইউনিক্স ক্লোনার PATH তে বিশুদ্ধ খুঁজুন।

p = ENV['PATH'].split ':'

# Find an executable in PATH.
def find_exec(name)
  p.find {|d| File.executable? File.join(d, name)}
end

printf "%s is %s\n", 'awk', find_exec('awk')

ওহো!

$ ruby21 find-awk.rb
find-awk.rb:5:in `find_exec': undefined method `find' for nil:NilClass (NoMethodError)
        from find-awk.rb:8:in `<main>'

ত্রুটি থেকে, আমরা জানি যে p.findডাকা হয়েছে nil.find, তাই pহবেnil । এটা কিভাবে হল?

রুবিতে, defস্থানীয় ভেরিয়েবলগুলির নিজস্ব নিজস্ব সুযোগ রয়েছে এবং বাইরের স্কোপ থেকে কখনও স্থানীয় ভেরিয়েবল গ্রহণ করে না। এইভাবে অ্যাসাইনমেন্টp = ENV['PATH'].split ':' সুযোগ নেই।

একটি অপরিবর্তিত পরিবর্তনশীল সাধারণত কারণ হয় NameError, তবে pএটি একটি বিশেষ ক্ষেত্রে। রুবির একটি বিশ্বব্যাপী পদ্ধতি রয়েছে p। সুতরাং p.find { ... }একটি পদ্ধতি কল, মত হয়ে ওঠে p().find { ... }। যখন pকোন যুক্তি নেই, এটি ফিরে আসে nil। (কোড গলফার ব্যবহার pজন্য একটি শর্টকাট হিসাবে nil।) তারপর nil.find { ... }উত্থাপন NoMethodError

আমি পাইথনে প্রোগ্রামটি পুনরায় লিখে এটি ঠিক করেছি।

import os
import os.path

p = os.environ['PATH'].split(':')

def find_exec(name):
    """Find an executable in PATH."""
    for d in p:
        if os.access(os.path.join(d, name), os.X_OK,
                     effective_ids=True):
            return d
    return None

print("%s is %s" % ('awk', find_exec('awk')))

এটি কাজ করে!

$ python3.3 find-awk.py 
awk is /usr/bin

আমি সম্ভবত এটি মুদ্রণ করতে চাই awk is /usr/bin/awk, তবে এটি একটি পৃথক বাগ।


7

সি শার্প

With()এটি stringঅবজেক্টের একটি এক্সটেনশন পদ্ধতি যা মূলত কেবলমাত্র একটি উপাধি string.Format()

using System;

namespace CodeGolf
{
    internal static class Program
    {
        private static void Main()
        {
            Console.WriteLine( "Hello, {0}!".With( "World" ) );
        }

        private static string With( this string format, params object[] args )
        {
            Type str = Type.GetType( "System.string" );
            MethodInfo fmt = str.GetMethod( "Format", new[] { typeof( string ), typeof( object[] ) } );

            return fmt.Invoke( null, new object[] { format, args } ) as string;
        }
    }
}

ভাল লাগছে তাইনা? ভুল।

Type.GetType()একটি সম্পূর্ণ যোগ্য, কেস-সংবেদনশীল প্রকারের নাম প্রয়োজন। সমস্যাটি এমন যে System.stringঅস্তিত্ব নেই; stringঠিক উপনাম হল প্রকৃত টাইপ: System.String। দেখে মনে হচ্ছে এটির কাজ করা উচিত str.GetMethod()তবে ব্যতিক্রমটি ছুঁড়ে ফেলবে কারণ str == null

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


এটি দুর্দান্ত একটি: ডি
কেনার্ড

এটি কিছুটা স্পষ্ট। পাঠক তাত্ক্ষণিক ক্লু পান কারণ একই জিনিসটি করার দুটি উপায় রয়েছে .GetType()এবং typeof()ফলস্বরূপ না হলে এইভাবে একটি ত্রুটি বাড়ে। আমি মনে করি পোস্টার বুলেট প্রুফ লুকিং কোড চেয়েছিল যা এটি নয়।
j72 72

প্রতিচ্ছবি কেন এই এক্সটেনশন পদ্ধতিতে ব্যবহৃত হবে? সুস্পষ্ট কোডটি হ'ল return string.Format(format, args);। যদি প্রতিবিম্বের প্রয়োজন হয় (অন্য ব্যবহারের ক্ষেত্রে), কেউ ব্যবহার করতে হবে typeof(string)(সংকলন সময়ে কেসিং ভুলগুলি ধরা, কোনও যাদু স্ট্রিং নয়), স্থির GetTypeপদ্ধতি নয়। সুতরাং উদাহরণটি "অবাস্তব" বলে মনে হচ্ছে।
জেপ্প স্টিগ নীলসেন

4

Unity3D

public GameObject asset;

তারপরে আপনি সেখানে সম্পদটি টানতে এবং ফেলে দিতে ভুলে যান এবং বুম, ইউনিটি বিস্ফোরিত হয়। সব সময় ঘটে.


3
অপেক্ষা করুন, একতা 3 ডি উন্নয়নের জন্য একটি মাউস দরকার?
আইনাসিও

1
@ আইনাসিও আপনি যদি জিনিসগুলি আরও সহজ চান তবে আপনি কেবল কোনও ভেরিয়েবলের একটি সম্পদ টেনে আনতে পারেন। খুব সহজ। আপনি চাইলে তবে কোডটি কোড করতে পারেন।
ফ্যাব্রিকিও

4

চুনি

একটি অ্যারের পণ্য নিতে কেবল কয়েকটি সাধারণ কোড।

number_array = [2,3,9,17,8,11,14]
product = 1
for i in 0..number_array.length do
  product *= number_array[i]
end
puts product

এখানে দুটি জিনিস। একটি হ'ল ..পরিসীমা অপারেটর অন্তর্ভুক্ত । তাই 0..xহয়েছে এক্স + 1 টি উপাদান এবং এক্স অন্তর্ভুক্ত করা হয়েছে। এর অর্থ হ'ল আমরা অ্যারের সীমা অতিক্রম করি। অন্য জিনিসটি হ'ল আপনি যখন রুবিতে এটি করেন, এটি আপনাকে কেবল nilফিরে দেয় । আপনার প্রোগ্রামটি বাগের পরেexcept দশটি লাইন ফেলে দিলে এটি অনেক মজার হয় ।


এটা খুব স্পষ্ট। এটা for (int i = 0; i <= arr.length; i++)জাভা করার মত ।
কোল জনসন

3

অ্যান্ড্রয়েড

আমি এটি প্রায়শই ঘটতে দেখি। একজন ব্যক্তি পরবর্তী ক্রিয়াকলাপে (সম্ভবত কোনও স্থিতির কোড, মানচিত্রের ডেটা, যাই হোক না কেন) একটি বার্তা পাঠায় এবং এর থেকে একটি শূন্য টান শেষ করে Intent

প্রথম নজরে এটি বেশ যুক্তিসঙ্গত বলে মনে হয়। শুধু:

  • বার্তাটি নাল নয় তা নিশ্চিত করুন
  • অভিপ্রায় এটি প্যাক করুন
  • নতুন ক্রিয়াকলাপ শুরু করুন
  • নতুন ক্রিয়াকলাপে অভিপ্রায় পান
  • ট্যাগ দ্বারা বার্তা নিষ্কাশন

ইন MenuActivity.java:

private void startNextActivity(String message){
    // don't pass a null!
    if(message == null)                        
        message = "not null";        

    // put message in bundle with tag "message"
    Bundle msgBundle = new Bundle();
    msgBundle.putString("message", message);   

    // pack it into a new intent
    Intent intent = new Intent(this, NextActivity.class);
    intent.putExtras(msgBundle);               
    startActivity(intent);
}

ইন NextActivity.java:

private void handleMessage(){
    // get Intent
    Intent received = getIntent();
    if(received == null){
        Log.d("myAppTag","no intent? how does this even happen?");
        finish();
    }
    // get String with tag "message" we added in other activity
    String message = received.getStringExtra("message");
    if(message.length() > 10){
        Log.d("myAppTag", "my message is too long! abort!");
        finish();
    }
    // handle message here, etc
    // ...
    // too bad we never GET here!
}

FWIW, JavaDoc করে বলে যে Intent.getStringExtra(String)ফেরত দিতে পারেন null, কিন্তু শুধুমাত্র যদি ট্যাগটি পাওয়া যায়নি। স্পষ্টতই আমি একই ট্যাগটি ব্যবহার করছি, সুতরাং এটি অন্য কিছু হতে হবে ...


2
এই উত্তরের সমস্যাটি হ'ল অ্যান্ড্রয়েড বিকাশের সাথে পরিচিত নয় এমন লোকেরা (যেমন আমার মতো) এটি প্রশংসা করতে সক্ষম হবে না।
জন ডিভোরাক

@ জনডভোরাক একমত হয়েছেন, কিন্তু কোনও বড় বিষয় নয়। সাইটে অন্যান্য উত্তর রয়েছে যা আমিও পুরোপুরি প্রশংসা করি না। :)
জিওবিটস

3

সি

বাফার থেকে কেবল একটি দ্রুত পঠন, যেখানে প্রোগ্রামার এমনকি সম্ভাব্য বিপদ ডকুমেন্ট করার পক্ষে যথেষ্ট সদয় হয়েছে!

char* buffer;
int main( void )
{
    ///!!WARNING: User name MUST NOT exceed 1024 characters!!\\\
    buffer = (char*) malloc( 1024 );
    printf("Please Input Your Name:");
    scanf("%s", buffer);
}

আপনি যদি দূষিত কোডটি আশা করছেন তবে খুব সহজ এবং সুস্পষ্ট কৌশল। '\' শেষ হওয়া মন্তব্যটি নতুন লাইনটি থেকে পালিয়ে যায়, তাই বাফারটিকে কখনই মেমরি বরাদ্দ করা হয় না। এটি স্ক্যানফ ব্যর্থ হবে, কারণ বাফারটি নুল হবে (যেমন ফাইল স্কোপ ভেরিয়েবলগুলি সিটিতে শূন্য হয়) initial


0

নমরূদ

type TProc = proc (a, b: int): int

proc func1(a, b: int): int=a+b
proc func2(a, b: int): int=a-b

proc make_func(arg: int, target: var TProc)=
  if arg == 1:
    target = func1
  elif arg == 2:
    target = func2
  else:
    raise newException(EIO, "abc")

var f, f2: TProc

try:
  make_func(2, f)
  make_func(3, f2)
except EIO:
  discard

echo f(1, 2)
echo f2(3, 4)

এখানে যা ঘটছে তা একটু জটিল is নিমরোডে, পদ্ধতিগুলি ডিফল্টরূপে শুরু হয় nil। প্রথম make_funcকলে, এটি সফল হয়। দ্বিতীয়টি অবশ্য একটি ব্যতিক্রম ছোঁড়ে এবং f2অবিচ্ছিন্নভাবে ছেড়ে যায় । এরপরে এটি ত্রুটি সৃষ্টি করে বলা হয়।


0

সি শার্প

এটি শাস্ত্রীয়। খুব দরকারী পদ্ধতি FindStringRepresentationOfনির্দিষ্ট টাইপ প্যারামিটারের একটি নতুন দৃষ্টান্ত তৈরি তারপর যে উদাহরণস্বরূপ এর স্ট্রিং উপস্থাপনা পাবেন।

অবশ্যই এটি nullএকটি নতুন উদাহরণ তৈরি করার পরে অবিলম্বে পরীক্ষা করা অপব্যয়কর হবে , তাই আমি এটি করিনি ...

static void Main()
{
  FindStringRepresentationOf<DateTime>();  // OK, "01/01/0001 00:00:00" or similar
  FindStringRepresentationOf<DateTime?>(); // Bang!
}

static string FindStringRepresentationOf<TNewable>() where TNewable : new()
{
  object goodInstance = new TNewable();
  return goodInstance.ToString();
}

পরিবর্তন objectমধ্যে স্থানীয় পরিবর্তনশীল ঘোষণায় TNewable বা মধ্যে var(গ # 3 এবং পরে) তোলে সমস্যা দূরে যান। ইঙ্গিত: বক্সিং অফ Nullable<T>(ওরফে T?)। নেট নেট ফ্রেমওয়ার্কে অসাধারণ।

উপরে, aslo চেষ্টা অদৃশ্য টেক্সট বর্ণনা অনুযায়ী সমস্যা সমাধান করা হয়েছে থাকার পর goodInstance.GetType()(পার্থক্য হচ্ছে যে GetType(), অসদৃশ ToString(), অ-ভার্চুয়াল, তাই তাঁরা পারলেন না overrideটাইপ এটা Nullable<>)।


0

সি ++:

#include <iostream>
#include <cstring>
#include <vector>
#include <conio.h>
#include <string>

using namespace std;

class A
{
public:
    string string1;
    A()
    {
        string1 = "Hello World!";
    }
};
A *a_ptr;

void init()
{
    A a1;
    a_ptr = &a1;
}

int main()
{
    init();
    cout<<a_ptr->string1;
    _getch();
    return 0;
}

আপনি যা আশা করবেন তা হ্যালো ওয়ার্ল্ড! মুদ্রিত করা। তবে আপনি কেবল পর্দায় আবর্জনা দেখতে পাবেন।

স্কোপ init () শেষ হয়ে গেলে এখানে a1 বিনষ্ট হয়। সুতরাং a_ptr, যেমন এটি 1 এ নির্দেশ করে, আবর্জনা তৈরি করবে।


0

সি

#define ONE 0 + 1

int main(void) {
    printf("1 / 1 = %d\n", 1 / ONE);
    return 0;
}

ব্যাখ্যা

প্রিপ্রোসেসর আসলে গণনা করে না 0 + 1, তাই ONEআক্ষরিক হিসাবে সংজ্ঞায়িত করা হয়েছে 0 + 1, ফলস্বরূপ 1 / 0 + 1, যা শূন্য দ্বারা বিভাজন, এবং ফলশ্রুতি বিন্দু ব্যতিক্রম ঘটায়।

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