具有非常大的十六进制地址位置的std :: bad_alloc

时间:2018-07-30 01:16:28

标签: c++ bad-alloc

我有一个使用代码分配内存的程序,

data[0] = new T[column_size.back() + 1];

数据声明为

T ** data;

它可以工作一段时间,但经过6500次迭代后,会出现此错误,

std::bad_alloc
[i05-007:21393] *** Process received signal ***
[i05-007:21393] Signal: Aborted (6)
[i05-007:21393] Signal code:  (-6)
[i05-007:21393] [ 0] /lib64/libc.so.6(gsignal+0x74)[0xffffffff1330a534]
[i05-007:21393] [ 1] /lib64/libc.so.6(abort+0x168)[0xffffffff1330bc14]

我试图使用try-catch块检查数据[0]的内存地址

try {
   data[0] = new T[column_size.back() + 1];
} catch (const std::exception& e) {
   cerr << "Iteration " << iter << ": data[0] is at " << data[0] << endl;
   cerr << e.what() << endl;
   abort();
}

首先,我得到一些常规的十六进制地址位置,例如

iteration 6498: data[0] is at 0xa267aec0
iteration 6499: data[0] is at 0xa26c9f70

在6500迭代中,代码产生bad_alloc错误,并且catch打印出data [0]在内存中的位置,如果转换为十进制,这是一个非常大的数字。

iteration 6500: data[0] is at 0xffffffff12a57310

是否对此有任何解释,或者是因为它已经在catch块中,所以才返回此地址?我想知道这实际上是否是有效地址。我试图将其转换为十进制,它是18446744069727417104,这是很大的。

谢谢。

0 个答案:

没有答案