I have the following program:
#include <iostream>
#include <string>
using namespace std;
using int_arr = int[3];
int& f(int_arr& arr, int index)
{
return arr[index];
}
int main() {
int arr[3] = {1, 2, 3};
int& g = f(arr, 0);
g = 5;
std::cout << arr[0] << std::endl;
}
Is arr[index]
returned by f considered a dangling reference?
I don't think this is a dangling reference since the arr
object continues to exist even after f
returns (so the reference is valid), but I wanted to confirm my understanding. I compiled this with -fsanitize=undefined
and it compiled fine and produced the expected output.
CodePudding user response:
No, arr
and g
have the same life time, so there's no dangling reference.
Note however that you can easily create a dangling reference with your function:
int empty;
int& ref = empty;
int &f(int arr[], int idx) { return arr[idx]; }
void g()
{
int arr[] = { 1, 2, 3 };
ref = f(arr, 0);
}
int main()
{
g();
// ref is accesable here and complete garbage
}