首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ new[] 動態數組作用域導致 delete 報錯解析

     編輯:程式設計綜合問答

錯誤代碼片段

else {
    int *choice = new int[num_choice];
    double *quantity_choice = new double[num_choice];
    // ... 使用數組 ...
} // ← 作用域結束,choice/quantity_choice 生命周期結束

delete[] choice;        // ❌ 編譯錯誤:choice 不在作用域內
delete[] quantity_choice;

編錯誤信息

error C2065: “choice”: 未聲明的標識符
error C2541: “delete”: 不能刪除不是指針的對象

根本原因

choice 和 quantity_choice 在 else 代碼塊 { } 內聲明,屬於塊級作用域。代碼塊結束後變量銷毀,外部無法訪問,導致 delete[] 找不到標識符。

修正方案

int *choice = nullptr;
double *quantity_choice = nullptr;

if (num_choice == 0) { ... }
else {
    choice = new int[num_choice];
    quantity_choice = new double[num_choice];
    // ... 使用 ...
}

if (choice) { delete[] choice; choice = nullptr; }
if (quantity_choice) { delete[] quantity_choice; quantity_choice = nullptr; }

額外警告

cal() 函數缺少 default 分支,導致「not all control paths return a value」警告。需補全:

default: return 0.0; // 或拋出異常
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved