Net*_*son 0 c++ arrays debugging pointers visual-studio-2010
我的课程有效,但我的教授说我的代码不正确,但表示他会在秋季学期找到原因......他在说什么?也许是不合适的东西?即使你是不正确的我会很感激你的大脑:)
void CResizableArray::SetSize( int intNewSize )
{
int intIndex = 0;
if( intNewSize < 0 ) intNewSize = 0;
if( intNewSize > intMAXIMUM_ARRAY_SIZE )
{
intNewSize = intMAXIMUM_ARRAY_SIZE;
}
//////////////////////////////////////
// ---> HUGE BUG HERE <--- //
// Code works but is WRONG //
// WHY IS THIS HELP ME FIND THE BUG //
//////////////////////////////////////
m_intArraySize = intNewSize;
m_paintValues = new int [m_intArraySize];
// Initialize to zero
for( intIndex = 0; intIndex < m_intArraySize; intIndex++ )
{
*( m_paintValues + intIndex ) = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
大概在此之前
m_paintValues = new int [m_intArraySize];
Run Code Online (Sandbox Code Playgroud)
m_paintValues
指向另一个数组.该数组现在已被泄露 - 您没有指向它的指针,因此它永远不会被释放.因此,永远不能重复使用该内存.编写一个可以完成大量工作的程序,在运行很长时间之前它会耗尽内存.
当你使用一块内存时,你需要释放它.在这里,正确的事情可能看起来像
delete[] m_paintValues;
m_paintValues = new int [m_intArraySize];
Run Code Online (Sandbox Code Playgroud)
但是还有更多问题.首先,你永远不能使用,delete[]
除非你知道m_paintValues
肯定指向一个数组; 你可以确保在构造函数中.更令人不安的是,当你设置一个新的大小时,之前的任何数据都m_paintValues
被丢弃 - 你不想将旧的值复制到新的数组中吗?这样做意味着在首次分配时使用临时变量来保存新数组,复制数据,然后将新数组分配给成员变量.
归档时间: |
|
查看次数: |
159 次 |
最近记录: |