Can`t obtain right data from tensor.contiguous().data_ptr()

I want to print the data from torch::Tensor.contiguous() using deference, but it returns a wrong result which is 1.4013e-43. This tensor shape is 663x663x860 in CPU. If I create a new tensor using torch::rand({600,600,600}) to run this code result would be correct.

This is my project code:

std::cout << "original address: " << static_cast<float*>(data.data_ptr()) << std::endl;

torch::Tensor contiguous_tensor = data.contiguous();

auto contiguous_address = static_cast<float*>(contiguous_tensor.data_ptr());

std::cout << "contiguous address: " << static_cast<float*>(contiguous_tensor.data_ptr()) << std::endl;

contiguous_tensor[0][0][2] = 100;

torch::Tensor nz = torch::nonzero(data);
long long  a = nz[0][0].item<int>();
int b = nz[0][1].item<int>();
int c = nz[0][2].item<int>();

std::cout << "a b c value is :" << data[a][b][c] << std::endl;
std::cout << "contiguous tensor nonzero is : " << contiguous_tensor[a][b][c] << std::endl;
std::cout << "contiguous tensor pointer value is : " << *(contiguous_address + a * size[2] * size[1] + b * size[2] + c) << std::endl;
std::cout << "prank value is : " << *(contiguous_address + 2) << std::endl;

for (int i = 0; i < 20; i++)
	std::cout << "address + " << i << " is : " << *(contiguous_address + i) << std::endl;

And it`s result:

original address : 000001C25E3E6080
contiguous address : 000001C31281E080
a b c value is :5
[ CPULongType{} ]
contiguous tensor nonzero is : 5
[ CPULongType{} ]
contiguous tensor pointer value is : 0
prank value is : 0
address + 0 is : 0
address + 1 is : 0
address + 2 is : 0
address + 3 is : 0
address + 4 is : 1.4013e-43
address + 5 is : 0
address + 6 is : 0
address + 7 is : 0
address + 8 is : 0
address + 9 is : 0
address + 10 is : 0
address + 11 is : 0
address + 12 is : 0
address + 13 is : 0
address + 14 is : 0
address + 15 is : 0
address + 16 is : 0
address + 17 is : 0
address + 18 is : 0
address + 19 is : 0

The most confusing is i have set contiguous_tensor = data.contiguous().to(torch::long), but the output is still float number, 1.403e-45. Theoretically, a tensor with long DataType should output 0 at this case instead of 1.403e-45.