1个块中的0个字节肯定丢失在丢失记录1 of 1中
0 bytes in 1 blocks are definitely lost in loss record 1 of 1
我在学校 java 学习 C/C++ 作为新人,由于是周末,我无法从那里获得帮助。我收到这样的错误:
==18== 0 bytes in 1 blocks are definitely lost in loss record 1 of 1
==18== at 0x483C583: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==18== by 0x109536: Table::Table(unsigned long) (taul2.cpp:38)
==18== by 0x1093CF: main (taul2.cpp:108)
主要内容:
Table nums(7);
nums.add(1); nums.add(2);
cout << nums<< endl;
Table nums2;
taul.place(nums);
cout << nums2<< endl;
Table nums3; // line 108
cout << nums3 << endl;
return 0;
Table:
class Table{
size_t max_size;
size_t amount;
int *numbers;
int fail;
public:
Table(size_t size=0)
{
fail= 0;
max_size = 0;
numbers = new int[size]; // line 38
if ( numbers ) max_size = size;
lkm = 0;
}
~Table() { if ( max_size != 0 ) delete [] numbers; max_size = 0; }
/* ... */
}
错误仅发生在长度为 0 的 nums3 上,调试器显示它转到 ~Table 方法,就像所有其他方法一样,但它是唯一有错误的 1。
即使你new
0字节,你还是要delete
它。对于每次分配,都会有一些额外的开销超出您要求的字节数。 (例如,堆中的条目、指针本身等...)。
旁注:new items[0]
不 return nullptr。即使是这样,delete [] nullptr
也完全可以而且安全。
从
更改析构函数
~Table() { if ( max_size != 0 ) delete [] numbers; max_size = 0; }
为此:
~Table() {
delete [] numbers;
}
我在学校 java 学习 C/C++ 作为新人,由于是周末,我无法从那里获得帮助。我收到这样的错误:
==18== 0 bytes in 1 blocks are definitely lost in loss record 1 of 1
==18== at 0x483C583: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==18== by 0x109536: Table::Table(unsigned long) (taul2.cpp:38)
==18== by 0x1093CF: main (taul2.cpp:108)
主要内容:
Table nums(7);
nums.add(1); nums.add(2);
cout << nums<< endl;
Table nums2;
taul.place(nums);
cout << nums2<< endl;
Table nums3; // line 108
cout << nums3 << endl;
return 0;
Table:
class Table{
size_t max_size;
size_t amount;
int *numbers;
int fail;
public:
Table(size_t size=0)
{
fail= 0;
max_size = 0;
numbers = new int[size]; // line 38
if ( numbers ) max_size = size;
lkm = 0;
}
~Table() { if ( max_size != 0 ) delete [] numbers; max_size = 0; }
/* ... */
}
错误仅发生在长度为 0 的 nums3 上,调试器显示它转到 ~Table 方法,就像所有其他方法一样,但它是唯一有错误的 1。
即使你new
0字节,你还是要delete
它。对于每次分配,都会有一些额外的开销超出您要求的字节数。 (例如,堆中的条目、指针本身等...)。
旁注:new items[0]
不 return nullptr。即使是这样,delete [] nullptr
也完全可以而且安全。
从
更改析构函数~Table() { if ( max_size != 0 ) delete [] numbers; max_size = 0; }
为此:
~Table() {
delete [] numbers;
}