C ++返回指针

时间:2017-01-26 08:58:27

标签: c++ pointers

#include <iostream>
using namespace std;

int* createArray();

int main() {
    int *arr = createArray();
    cout << "Main: " << arr << endl;

    arr[0] = 0;
    arr[1] = 1;

    cout << arr[0] << endl;
    cout << arr[1] << endl;
}

int* createArray() {
    int arr[2];
    cout << "createArray()1: " << arr << endl;
    return arr;
}

我不明白为什么我只打电话给这句话

cout << arr[0] << endl;

cout << arr[1] << endl;

可以显示正确的值。 但如果我同时调用两个语句,它将显示

createArray()1: 00AFFAF4
Main: 00AFFAF4
0
11533068  //Don't show 1

2 个答案:

答案 0 :(得分:5)

data.frame返回的指针指向不存在的对象。返回函数时,本地数组被销毁。当您取消引用createArray中的悬空指针时,程序的行为是未定义的。

解决方案:不要返回指向本地变量的指针或引用。在这种情况下,您可以返回数组的副本。您不能按值返回原始数组,但可以返回类似main的包装器结构。

答案 1 :(得分:0)

您正在返回一个指向本地变量的指针,该变量在功能块结束时被销毁。

但要注意,当你使用new运算符时,你需要在其他地方使用delete(至少不使用智能指针)。

解决方案:

String sql = "select date, Order_No, Round(sub_total,2) as Subtotal,"
                + "Round(Service_Tax,2) as Service_Tax, Round(VAT,2) as VAT, Round(KKC,2) as KKC_Tax,"
                + "Round(SBC,2) as SBC_Tax, Round(lux_tax,2) as Luxury_tax, Round(Total,2) as Total from Canteen"
                + "where Date between ? and ? order by date asc ";
PreparedStatement pst=con.prepareStatement(sql);
pst.setString(1, date1.getText());
pst.setString(2, date2.getText());
ResultSet rs=pst.executeQuery();