gpt4 book ai didi

c++ - operator new[] 只分配一个元素,不管请求了多少(C++)

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:06 25 4
gpt4 key购买 nike

<分区>

对于介绍性的 C++ 类(class)作业(当然是今晚!),我必须实现自己的 Vector 类。大多数一切似乎都在工作,除了我在 VS2012 的调试器中注意到它似乎实际上只分配了 _arr[] 中的一个元素。无论请求的元素数量 (n) 是多少,它只分配数组中的一个元素。我按照调试跟踪,new[] 收到 20 个请求(请求的 5 个元素 * 4 个字节用于 int),但是当我稍后检查 sizeof(_arr) 时,它只显示 4 个字节。其他 16 个字节在哪里结束?为什么缺少其他 4 个元素?没有指示错误,也没有抛出异常。

template <typename T>
void Vector<T>::Add ( const T& val )
{
// Check if a new element would grow beyond the current allocation.
if ( _length + 1 > _allocSize )
{
size_t n = 5; // <-- Set statically for this example
// Create a new array of the requested size
try
{
T* newArr = new (std::nothrow) T[n]();
if( newArr == NULL )
throw VectorException( VECTOR_CANNOT_GROW,
"Vector::Add", _length, n );
// Copy the old array into the new array
if( _length > 0 )
for( size_t idx = 0; idx < _length; idx++ )
newArr[idx] = _arr[idx];
// Delete any dynamic memory allocated to the old array.
delete[] _arr;

// Note: _sizeof(newArr) here indicates only 4 bytes!!!

// Point _arr to the new array
_arr = newArr;

// Update the allocated size to the new array size
_allocSize = n;
}
catch ( VectorException &cException )
{
cerr << cException.GetError() << endl;
DoExit( cException.GetErrorNum() );
}
}
// Add the new item to the end of the array and update the length.
_arr[ _length++ ] = val;
}

此外,我已经能够按预期使用 Vectors,但恐怕我实际上只是在访问数组本身之外的内存。好像是分配给程序的,但是在数组中没有出现。

还是我只是糊涂了,真的一点问题都没有?

感谢您的帮助!

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com