2014-02-10 148 views
0

我一直在试图调整这个数组的大小,它编译得很好,但是当我运行它时,我得到了这个非常长的错误信息。C++调整动态数组大小

下面是该函数的代码:

void arrayClass_Namespace::arrayClass::resize(int newSize) 
{ 
    std::cout << "\nPlease input a new size for the array: "; 
    std::cin >> newSize; 

    assert(newSize < MAX_SIZE); 

    int *resize_arr = new int[newSize]; 
    for(int index = 0; index < size; index++) 
    { 
     resize_arr[index] = arr[index]; 
    } 

    size++; 
    arr = resize_arr; 
    delete[] resize_arr; 
} 

下面是更新代码,现在工作完全正常:

void arrayTools_GabriellaRamirez::arrayTools::resize(int newSize) 
{ 
    std::cout << "\nPlease input a new size for the array: "; 
    std::cin >> newSize; 

    assert(newSize < MAX_SIZE); 

    int *resize_arr = new int[newSize]; 
    for(int index = 0; index < size; index++) 
    { 
     resize_arr[index] = arr[index]; 
    } 

    for(int index = size; size < newSize; index++) 
    { 
     size++; 
    } 

    for(int index = size; size > newSize; index++) 
    { 
     size--; 
    } 

    delete [] arr; 
    arr = resize_arr; 
} 
+3

如果您使用'std :: vector arr'而不是'int * arr',这些问题就会消失。 –

+2

将来请发布错误信息。 “非常长的错误信息”并不能帮助未来的访问者。 – 2014-02-10 01:49:36

+0

@Robᵩ'std :: cout <<“\ n请为该数组输入一个新的大小:”;'我不认为他在这里需要生产代码,只是练习。 – user3286380

回答

6

delete[] resize_arr被删除您所做的新的数组。你需要做的

delete[] arr; 
arr = resize_arr; 

顺便说一句,你不检查,以确保新的数组大小不小于used所以你可能写出来的新数组的边界。

另外我认为size++是不正确的。

+0

太棒了!非常感谢!现在工作得很好。 – user3062299