Bagaimana untuk menyelesaikan ralat masa jalan C++: 'penunjuk tidak dimulakan'?

王林
Lepaskan: 2023-08-27 14:36:24
asal
930 orang telah melayarinya

如何解决C++运行时错误:'pointer is uninitialized'?

Bagaimana untuk menyelesaikan ralat masa jalan C++: 'penunjuk tidak dimulakan'?

Dalam pengaturcaraan C++, pelbagai ralat masa jalan sering dihadapi. Salah satu ralat biasa ialah 'penunjuk tidak dimulakan', iaitu ralat yang penunjuk tidak dimulakan. Artikel ini akan menerangkan punca dan penyelesaian ralat ini dan memberikan contoh kod yang sepadan.

Dalam C++, penunjuk ialah pembolehubah yang menyimpan alamat memori. Apabila kita menggunakan penunjuk, kita perlu memastikan bahawa ia menunjuk ke alamat memori yang sah, jika tidak, tingkah laku yang tidak ditentukan akan berlaku. Jika penunjuk tidak diperuntukkan atau dimulakan sebelum digunakan, ralat 'penunjuk tidak dimulakan' akan berlaku.

Terdapat banyak sebab mengapa penunjuk tidak dimulakan Berikut adalah beberapa situasi biasa:

  1. Mengisytiharkan penunjuk tetapi tidak memperuntukkan memori untuknya:

    int* ptr;
    Salin selepas log masuk
  2. Objek yang ditunjuk oleh penunjuk itu dimusnahkan. diisytiharkan:

    int* ptr;
    {
        int value = 10;
        ptr = &value;
    } // 代码块结束时,value对象被销毁
    Salin selepas log masuk
  3. Penunjuk disalin atau diberikan kepada penuding lain manakala penuding yang satu lagi tidak dimulakan:

    int* ptr1;
    int* ptr2 = ptr1;
    Salin selepas log masuk

Penyelesaian kepada masalah ini adalah untuk memastikan penunjuk dimulakan atau menunjuk ke alamat memori yang sah sebelum digunakan. Berikut ialah beberapa penyelesaian biasa:

  1. Gunakan kata kunci baharu untuk memperuntukkan memori bagi penuding:

    int* ptr = new int;
    *ptr = 10;
    Salin selepas log masuk
  2. Mulakan penuding kepada null:

    int* ptr = nullptr;
    Salin selepas log masuk
  3. Jika anda telah mengisytiharkan objek sebelum anda mengisytiharkan objek. boleh Halakan penunjuk ke objek:

    int value = 10;
    int* ptr = &value;
    Salin selepas log masuk
  4. Berhati-hati untuk mengelakkan menyalin penunjuk yang tidak dimulakan ke penunjuk lain.

Berikut ialah contoh lengkap yang menunjukkan cara menyelesaikan ralat 'pointer is uninitialized' dalam C++:

#include <iostream>

int main() {
    int* ptr = nullptr; // 初始化指针为null

    ptr = new int; // 为指针分配内存
    *ptr = 10; // 写入int型对象的值

    std::cout << *ptr << std::endl; // 输出10

    delete ptr; // 释放内存

    return 0;
}
Salin selepas log masuk

Dalam contoh ini, kita mula-mula memulakan pointer ptr kepada nullptr dan kemudian memperuntukkan memori untuknya menggunakan kata kunci baharu . Seterusnya, kami menulis nilai pada alamat memori yang ditunjukkan oleh penunjuk dan mencetak hasilnya. Akhir sekali, kami menggunakan kata kunci padam untuk membebaskan memori yang diperuntukkan sebelum ini.

Untuk meringkaskan, terdapat banyak cara untuk menyelesaikan ralat 'pointer is uninitialized' dalam C++, yang paling biasa ialah menggunakan new untuk memperuntukkan memori untuk penunjuk atau memulakan penunjuk kepada null. Semasa proses pengaturcaraan, pastikan anda memulakan penunjuk dengan betul untuk mengelakkan tingkah laku yang tidak ditentukan.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat masa jalan C++: 'penunjuk tidak dimulakan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan