چه تفاوتی بین یک اشاره گر آویزان و یک اشاره گر تهی در C وجود دارد؟ از نظر فنی ، هر دو یکسان به نظر می رسند.


پاسخ 1:

هیچ فرقی نمی کند مگر اینکه شما یکی از این نشانگرها را تغییر دهید. بنابراین شلنکر به این معنی است که از حافظه ای که توسط اشاره گر به آن اشاره می شود می توان برای چیز دیگری استفاده کرد. با این حال ، این برنامه فرض می کند که محتوای قدیمی هنوز وجود دارد و سعی می کند به آن دسترسی پیدا کند. این معمولاً منجر به رفتار نادرست هنگام اجرای برنامه می شود.

علاوه بر این ، من معتقدم که این سوال به شدت نشان می دهد که شما "اشاره گرها" را درک نمی کنید. اگر شما از حافظه به عنوان یک سری زمینه های شماره گذاری استفاده می کنید که در آن هر فیلد می تواند محتوا داشته باشد (یک مقدار ، معمولاً 0 ... 255) ، اشاره گر به سادگی یک عدد صحیح است (من ویژگی های معماری را در اینجا ساده می کنم) که شماره شامل یکی از این جعبه ها است (نه مقدار).


پاسخ 2:

من در اینجا بسیاری از "انگلیسی" ها را می بینم ، که ممکن است برای کسی که مفهوم آن را می داند مفید باشد ، اما برای کسی که این کار را نکند ، چیزی غیر از اشعار جادویی نخواهد بود. با این حال ، خنده دار خنده دار در پاسخ ها و استعاره ها است. متاسفم اگر کسی را اهانت کند.

اشاره گر Null: یک نشانگر که آدرس آن را به هیچ عنوان یا NULL می گوید. نوشتن در این مرحله اشتباه است. این امر به منظور جلوگیری از نوشتن برنامه نویسان به طور اتفاقی به یک مکان است که می تواند منجر به خطاهای تقسیم و یا خرابی شود. یک اشاره گر همیشه باید با NULL تنظیم شود و قبل از نوشتن برای NULL بررسی شود. این سناریو را در نظر بگیرید:

int * p؛ // در حال حاضر این نشانگر حاوی یک آدرس تصادفی است و می تواند به هر موقعیتی ، حتی در خارج از بخش نیز اشاره کند

* p = 10؛ // که قطعاً خطایی خواهد داشت.

چیزی امن خواهد بود:

int * p = NULL؛

اگر (p! = NULL)

* p = 10؛

Dangling اشاره گر: همانطور که از نام آن پیداست ، نشانگر است که هیچ ایده ای ندارد که کجا باید به آن اشاره کند زیرا بلوک حافظه ای که در ابتدا به آن اشاره داشت به نوعی منتشر می شود.

روش های زیادی برای آویزان کردن یک اشاره گر وجود دارد. متداول ترین روش ایجاد ، کپی و حذف موارد جدید است

int * p = NULL؛ int * q = NULL؛

p = x جدید؛

q = p؛

q حذف کنید؛ // نشانگر بلوک حافظه q و q از حافظه حذف می شوند

// از اینجا ما یک نشانگر p با یک آدرس داریم که در حافظه وجود ندارد. اگر می خواهیم مقداری را به این نشانگر اختصاص دهیم ، دچار مشکل می شویم ، p اشاره گر در اینجا آویزان است

* p = 10؛ // سقوط

روش دیگری که احتمالاً می توانید به صورت تصادفی یک اشاره گر خاموش ایجاد کنید این است که یک کپی صاف از جسم درست کنید ، یا با اختصاص دادن آن یا با انتقال یک شی به روشی با استفاده از سازنده کپی تهیه شده توسط کامپایلر ، که به نوبه خود یک مسطح است. کپی ساخته شده برای شما.


پاسخ 3:

من در اینجا بسیاری از "انگلیسی" ها را می بینم ، که ممکن است برای کسی که مفهوم آن را می داند مفید باشد ، اما برای کسی که این کار را نکند ، چیزی غیر از اشعار جادویی نخواهد بود. با این حال ، خنده دار خنده دار در پاسخ ها و استعاره ها است. متاسفم اگر کسی را اهانت کند.

اشاره گر Null: یک نشانگر که آدرس آن را به هیچ عنوان یا NULL می گوید. نوشتن در این مرحله اشتباه است. این امر به منظور جلوگیری از نوشتن برنامه نویسان به طور اتفاقی به یک مکان است که می تواند منجر به خطاهای تقسیم و یا خرابی شود. یک اشاره گر همیشه باید با NULL تنظیم شود و قبل از نوشتن برای NULL بررسی شود. این سناریو را در نظر بگیرید:

int * p؛ // در حال حاضر این نشانگر حاوی یک آدرس تصادفی است و می تواند به هر موقعیتی ، حتی در خارج از بخش نیز اشاره کند

* p = 10؛ // که قطعاً خطایی خواهد داشت.

چیزی امن خواهد بود:

int * p = NULL؛

اگر (p! = NULL)

* p = 10؛

Dangling اشاره گر: همانطور که از نام آن پیداست ، نشانگر است که هیچ ایده ای ندارد که کجا باید به آن اشاره کند زیرا بلوک حافظه ای که در ابتدا به آن اشاره داشت به نوعی منتشر می شود.

روش های زیادی برای آویزان کردن یک اشاره گر وجود دارد. متداول ترین روش ایجاد ، کپی و حذف موارد جدید است

int * p = NULL؛ int * q = NULL؛

p = x جدید؛

q = p؛

q حذف کنید؛ // نشانگر بلوک حافظه q و q از حافظه حذف می شوند

// از اینجا ما یک نشانگر p با یک آدرس داریم که در حافظه وجود ندارد. اگر می خواهیم مقداری را به این نشانگر اختصاص دهیم ، دچار مشکل می شویم ، p اشاره گر در اینجا آویزان است

* p = 10؛ // سقوط

روش دیگری که احتمالاً می توانید به صورت تصادفی یک اشاره گر خاموش ایجاد کنید این است که یک کپی صاف از جسم درست کنید ، یا با اختصاص دادن آن یا با انتقال یک شی به روشی با استفاده از سازنده کپی تهیه شده توسط کامپایلر ، که به نوبه خود یک مسطح است. کپی ساخته شده برای شما.


پاسخ 4:

من در اینجا بسیاری از "انگلیسی" ها را می بینم ، که ممکن است برای کسی که مفهوم آن را می داند مفید باشد ، اما برای کسی که این کار را نکند ، چیزی غیر از اشعار جادویی نخواهد بود. با این حال ، خنده دار خنده دار در پاسخ ها و استعاره ها است. متاسفم اگر کسی را اهانت کند.

اشاره گر Null: یک نشانگر که آدرس آن را به هیچ عنوان یا NULL می گوید. نوشتن در این مرحله اشتباه است. این امر به منظور جلوگیری از نوشتن برنامه نویسان به طور اتفاقی به یک مکان است که می تواند منجر به خطاهای تقسیم و یا خرابی شود. یک اشاره گر همیشه باید با NULL تنظیم شود و قبل از نوشتن برای NULL بررسی شود. این سناریو را در نظر بگیرید:

int * p؛ // در حال حاضر این نشانگر حاوی یک آدرس تصادفی است و می تواند به هر موقعیتی ، حتی در خارج از بخش نیز اشاره کند

* p = 10؛ // که قطعاً خطایی خواهد داشت.

چیزی امن خواهد بود:

int * p = NULL؛

اگر (p! = NULL)

* p = 10؛

Dangling اشاره گر: همانطور که از نام آن پیداست ، نشانگر است که هیچ ایده ای ندارد که کجا باید به آن اشاره کند زیرا بلوک حافظه ای که در ابتدا به آن اشاره داشت به نوعی منتشر می شود.

روش های زیادی برای آویزان کردن یک اشاره گر وجود دارد. متداول ترین روش ایجاد ، کپی و حذف موارد جدید است

int * p = NULL؛ int * q = NULL؛

p = x جدید؛

q = p؛

q حذف کنید؛ // نشانگر بلوک حافظه q و q از حافظه حذف می شوند

// از اینجا ما یک نشانگر p با یک آدرس داریم که در حافظه وجود ندارد. اگر می خواهیم مقداری را به این نشانگر اختصاص دهیم ، دچار مشکل می شویم ، p اشاره گر در اینجا آویزان است

* p = 10؛ // سقوط

روش دیگری که احتمالاً می توانید به صورت تصادفی یک اشاره گر خاموش ایجاد کنید این است که یک کپی صاف از جسم درست کنید ، یا با اختصاص دادن آن یا با انتقال یک شی به روشی با استفاده از سازنده کپی تهیه شده توسط کامپایلر ، که به نوبه خود یک مسطح است. کپی ساخته شده برای شما.


پاسخ 5:

من در اینجا بسیاری از "انگلیسی" ها را می بینم ، که ممکن است برای کسی که مفهوم آن را می داند مفید باشد ، اما برای کسی که این کار را نکند ، چیزی غیر از اشعار جادویی نخواهد بود. با این حال ، خنده دار خنده دار در پاسخ ها و استعاره ها است. متاسفم اگر کسی را اهانت کند.

اشاره گر Null: یک نشانگر که آدرس آن را به هیچ عنوان یا NULL می گوید. نوشتن در این مرحله اشتباه است. این امر به منظور جلوگیری از نوشتن برنامه نویسان به طور اتفاقی به یک مکان است که می تواند منجر به خطاهای تقسیم و یا خرابی شود. یک اشاره گر همیشه باید با NULL تنظیم شود و قبل از نوشتن برای NULL بررسی شود. این سناریو را در نظر بگیرید:

int * p؛ // در حال حاضر این نشانگر حاوی یک آدرس تصادفی است و می تواند به هر موقعیتی ، حتی در خارج از بخش نیز اشاره کند

* p = 10؛ // که قطعاً خطایی خواهد داشت.

چیزی امن خواهد بود:

int * p = NULL؛

اگر (p! = NULL)

* p = 10؛

Dangling اشاره گر: همانطور که از نام آن پیداست ، نشانگر است که هیچ ایده ای ندارد که کجا باید به آن اشاره کند زیرا بلوک حافظه ای که در ابتدا به آن اشاره داشت به نوعی منتشر می شود.

روش های زیادی برای آویزان کردن یک اشاره گر وجود دارد. متداول ترین روش ایجاد ، کپی و حذف موارد جدید است

int * p = NULL؛ int * q = NULL؛

p = x جدید؛

q = p؛

q حذف کنید؛ // نشانگر بلوک حافظه q و q از حافظه حذف می شوند

// از اینجا ما یک نشانگر p با یک آدرس داریم که در حافظه وجود ندارد. اگر می خواهیم مقداری را به این نشانگر اختصاص دهیم ، دچار مشکل می شویم ، p اشاره گر در اینجا آویزان است

* p = 10؛ // سقوط

روش دیگری که احتمالاً می توانید به صورت تصادفی یک اشاره گر خاموش ایجاد کنید این است که یک کپی صاف از جسم درست کنید ، یا با اختصاص دادن آن یا با انتقال یک شی به روشی با استفاده از سازنده کپی تهیه شده توسط کامپایلر ، که به نوبه خود یک مسطح است. کپی ساخته شده برای شما.


پاسخ 6:

من در اینجا بسیاری از "انگلیسی" ها را می بینم ، که ممکن است برای کسی که مفهوم آن را می داند مفید باشد ، اما برای کسی که این کار را نکند ، چیزی غیر از اشعار جادویی نخواهد بود. با این حال ، خنده دار خنده دار در پاسخ ها و استعاره ها است. متاسفم اگر کسی را اهانت کند.

اشاره گر Null: یک نشانگر که آدرس آن را به هیچ عنوان یا NULL می گوید. نوشتن در این مرحله اشتباه است. این امر به منظور جلوگیری از نوشتن برنامه نویسان به طور اتفاقی به یک مکان است که می تواند منجر به خطاهای تقسیم و یا خرابی شود. یک اشاره گر همیشه باید با NULL تنظیم شود و قبل از نوشتن برای NULL بررسی شود. این سناریو را در نظر بگیرید:

int * p؛ // در حال حاضر این نشانگر حاوی یک آدرس تصادفی است و می تواند به هر موقعیتی ، حتی در خارج از بخش نیز اشاره کند

* p = 10؛ // که قطعاً خطایی خواهد داشت.

چیزی امن خواهد بود:

int * p = NULL؛

اگر (p! = NULL)

* p = 10؛

Dangling اشاره گر: همانطور که از نام آن پیداست ، نشانگر است که هیچ ایده ای ندارد که کجا باید به آن اشاره کند زیرا بلوک حافظه ای که در ابتدا به آن اشاره داشت به نوعی منتشر می شود.

روش های زیادی برای آویزان کردن یک اشاره گر وجود دارد. متداول ترین روش ایجاد ، کپی و حذف موارد جدید است

int * p = NULL؛ int * q = NULL؛

p = x جدید؛

q = p؛

q حذف کنید؛ // نشانگر بلوک حافظه q و q از حافظه حذف می شوند

// از اینجا ما یک نشانگر p با یک آدرس داریم که در حافظه وجود ندارد. اگر می خواهیم مقداری را به این نشانگر اختصاص دهیم ، دچار مشکل می شویم ، p اشاره گر در اینجا آویزان است

* p = 10؛ // سقوط

روش دیگری که احتمالاً می توانید به صورت تصادفی یک اشاره گر خاموش ایجاد کنید این است که یک کپی صاف از جسم درست کنید ، یا با اختصاص دادن آن یا با انتقال یک شی به روشی با استفاده از سازنده کپی تهیه شده توسط کامپایلر ، که به نوبه خود یک مسطح است. کپی ساخته شده برای شما.


پاسخ 7:

من در اینجا بسیاری از "انگلیسی" ها را می بینم ، که ممکن است برای کسی که مفهوم آن را می داند مفید باشد ، اما برای کسی که این کار را نکند ، چیزی غیر از اشعار جادویی نخواهد بود. با این حال ، خنده دار خنده دار در پاسخ ها و استعاره ها است. متاسفم اگر کسی را اهانت کند.

اشاره گر Null: یک نشانگر که آدرس آن را به هیچ عنوان یا NULL می گوید. نوشتن در این مرحله اشتباه است. این امر به منظور جلوگیری از نوشتن برنامه نویسان به طور اتفاقی به یک مکان است که می تواند منجر به خطاهای تقسیم و یا خرابی شود. یک اشاره گر همیشه باید با NULL تنظیم شود و قبل از نوشتن برای NULL بررسی شود. این سناریو را در نظر بگیرید:

int * p؛ // در حال حاضر این نشانگر حاوی یک آدرس تصادفی است و می تواند به هر موقعیتی ، حتی در خارج از بخش نیز اشاره کند

* p = 10؛ // که قطعاً خطایی خواهد داشت.

چیزی امن خواهد بود:

int * p = NULL؛

اگر (p! = NULL)

* p = 10؛

Dangling اشاره گر: همانطور که از نام آن پیداست ، نشانگر است که هیچ ایده ای ندارد که کجا باید به آن اشاره کند زیرا بلوک حافظه ای که در ابتدا به آن اشاره داشت به نوعی منتشر می شود.

روش های زیادی برای آویزان کردن یک اشاره گر وجود دارد. متداول ترین روش ایجاد ، کپی و حذف موارد جدید است

int * p = NULL؛ int * q = NULL؛

p = x جدید؛

q = p؛

q حذف کنید؛ // نشانگر بلوک حافظه q و q از حافظه حذف می شوند

// از اینجا ما یک نشانگر p با یک آدرس داریم که در حافظه وجود ندارد. اگر می خواهیم مقداری را به این نشانگر اختصاص دهیم ، دچار مشکل می شویم ، p اشاره گر در اینجا آویزان است

* p = 10؛ // سقوط

روش دیگری که احتمالاً می توانید به صورت تصادفی یک اشاره گر خاموش ایجاد کنید این است که یک کپی صاف از جسم درست کنید ، یا با اختصاص دادن آن یا با انتقال یک شی به روشی با استفاده از سازنده کپی تهیه شده توسط کامپایلر ، که به نوبه خود یک مسطح است. کپی ساخته شده برای شما.


پاسخ 8:

من در اینجا بسیاری از "انگلیسی" ها را می بینم ، که ممکن است برای کسی که مفهوم آن را می داند مفید باشد ، اما برای کسی که این کار را نکند ، چیزی غیر از اشعار جادویی نخواهد بود. با این حال ، خنده دار خنده دار در پاسخ ها و استعاره ها است. متاسفم اگر کسی را اهانت کند.

اشاره گر Null: یک نشانگر که آدرس آن را به هیچ عنوان یا NULL می گوید. نوشتن در این مرحله اشتباه است. این امر به منظور جلوگیری از نوشتن برنامه نویسان به طور اتفاقی به یک مکان است که می تواند منجر به خطاهای تقسیم و یا خرابی شود. یک اشاره گر همیشه باید با NULL تنظیم شود و قبل از نوشتن برای NULL بررسی شود. این سناریو را در نظر بگیرید:

int * p؛ // در حال حاضر این نشانگر حاوی یک آدرس تصادفی است و می تواند به هر موقعیتی ، حتی در خارج از بخش نیز اشاره کند

* p = 10؛ // که قطعاً خطایی خواهد داشت.

چیزی امن خواهد بود:

int * p = NULL؛

اگر (p! = NULL)

* p = 10؛

Dangling اشاره گر: همانطور که از نام آن پیداست ، نشانگر است که هیچ ایده ای ندارد که کجا باید به آن اشاره کند زیرا بلوک حافظه ای که در ابتدا به آن اشاره داشت به نوعی منتشر می شود.

روش های زیادی برای آویزان کردن یک اشاره گر وجود دارد. متداول ترین روش ایجاد ، کپی و حذف موارد جدید است

int * p = NULL؛ int * q = NULL؛

p = x جدید؛

q = p؛

q حذف کنید؛ // نشانگر بلوک حافظه q و q از حافظه حذف می شوند

// از اینجا ما یک نشانگر p با یک آدرس داریم که در حافظه وجود ندارد. اگر می خواهیم مقداری را به این نشانگر اختصاص دهیم ، دچار مشکل می شویم ، p اشاره گر در اینجا آویزان است

* p = 10؛ // سقوط

روش دیگری که احتمالاً می توانید به صورت تصادفی یک اشاره گر خاموش ایجاد کنید این است که یک کپی صاف از جسم درست کنید ، یا با اختصاص دادن آن یا با انتقال یک شی به روشی با استفاده از سازنده کپی تهیه شده توسط کامپایلر ، که به نوبه خود یک مسطح است. کپی ساخته شده برای شما.


پاسخ 9:

من در اینجا بسیاری از "انگلیسی" ها را می بینم ، که ممکن است برای کسی که مفهوم آن را می داند مفید باشد ، اما برای کسی که این کار را نکند ، چیزی غیر از اشعار جادویی نخواهد بود. با این حال ، خنده دار خنده دار در پاسخ ها و استعاره ها است. متاسفم اگر کسی را اهانت کند.

اشاره گر Null: یک نشانگر که آدرس آن را به هیچ عنوان یا NULL می گوید. نوشتن در این مرحله اشتباه است. این امر به منظور جلوگیری از نوشتن برنامه نویسان به طور اتفاقی به یک مکان است که می تواند منجر به خطاهای تقسیم و یا خرابی شود. یک اشاره گر همیشه باید با NULL تنظیم شود و قبل از نوشتن برای NULL بررسی شود. این سناریو را در نظر بگیرید:

int * p؛ // در حال حاضر این نشانگر حاوی یک آدرس تصادفی است و می تواند به هر موقعیتی ، حتی در خارج از بخش نیز اشاره کند

* p = 10؛ // که قطعاً خطایی خواهد داشت.

چیزی امن خواهد بود:

int * p = NULL؛

اگر (p! = NULL)

* p = 10؛

Dangling اشاره گر: همانطور که از نام آن پیداست ، نشانگر است که هیچ ایده ای ندارد که کجا باید به آن اشاره کند زیرا بلوک حافظه ای که در ابتدا به آن اشاره داشت به نوعی منتشر می شود.

روش های زیادی برای آویزان کردن یک اشاره گر وجود دارد. متداول ترین روش ایجاد ، کپی و حذف موارد جدید است

int * p = NULL؛ int * q = NULL؛

p = x جدید؛

q = p؛

q حذف کنید؛ // نشانگر بلوک حافظه q و q از حافظه حذف می شوند

// از اینجا ما یک نشانگر p با یک آدرس داریم که در حافظه وجود ندارد. اگر می خواهیم مقداری را به این نشانگر اختصاص دهیم ، دچار مشکل می شویم ، p اشاره گر در اینجا آویزان است

* p = 10؛ // سقوط

روش دیگری که احتمالاً می توانید به صورت تصادفی یک اشاره گر خاموش ایجاد کنید این است که یک کپی صاف از جسم درست کنید ، یا با اختصاص دادن آن یا با انتقال یک شی به روشی با استفاده از سازنده کپی تهیه شده توسط کامپایلر ، که به نوبه خود یک مسطح است. کپی ساخته شده برای شما.


پاسخ 10:

من در اینجا بسیاری از "انگلیسی" ها را می بینم ، که ممکن است برای کسی که مفهوم آن را می داند مفید باشد ، اما برای کسی که این کار را نکند ، چیزی غیر از اشعار جادویی نخواهد بود. با این حال ، خنده دار خنده دار در پاسخ ها و استعاره ها است. متاسفم اگر کسی را اهانت کند.

اشاره گر Null: یک نشانگر که آدرس آن را به هیچ عنوان یا NULL می گوید. نوشتن در این مرحله اشتباه است. این امر به منظور جلوگیری از نوشتن برنامه نویسان به طور اتفاقی به یک مکان است که می تواند منجر به خطاهای تقسیم و یا خرابی شود. یک اشاره گر همیشه باید با NULL تنظیم شود و قبل از نوشتن برای NULL بررسی شود. این سناریو را در نظر بگیرید:

int * p؛ // در حال حاضر این نشانگر حاوی یک آدرس تصادفی است و می تواند به هر موقعیتی ، حتی در خارج از بخش نیز اشاره کند

* p = 10؛ // که قطعاً خطایی خواهد داشت.

چیزی امن خواهد بود:

int * p = NULL؛

اگر (p! = NULL)

* p = 10؛

Dangling اشاره گر: همانطور که از نام آن پیداست ، نشانگر است که هیچ ایده ای ندارد که کجا باید به آن اشاره کند زیرا بلوک حافظه ای که در ابتدا به آن اشاره داشت به نوعی منتشر می شود.

روش های زیادی برای آویزان کردن یک اشاره گر وجود دارد. متداول ترین روش ایجاد ، کپی و حذف موارد جدید است

int * p = NULL؛ int * q = NULL؛

p = x جدید؛

q = p؛

q حذف کنید؛ // نشانگر بلوک حافظه q و q از حافظه حذف می شوند

// از اینجا ما یک نشانگر p با یک آدرس داریم که در حافظه وجود ندارد. اگر می خواهیم مقداری را به این نشانگر اختصاص دهیم ، دچار مشکل می شویم ، p اشاره گر در اینجا آویزان است

* p = 10؛ // سقوط

روش دیگری که احتمالاً می توانید به صورت تصادفی یک اشاره گر خاموش ایجاد کنید این است که یک کپی صاف از جسم درست کنید ، یا با اختصاص دادن آن یا با انتقال یک شی به روشی با استفاده از سازنده کپی تهیه شده توسط کامپایلر ، که به نوبه خود یک مسطح است. کپی ساخته شده برای شما.