簡體   English   中英

重新增長數組時出錯:寫入時緩沖區溢出

[英]Error while regrowing an array: Buffer overrun while writing to

所以我試圖重新增長這個一維動態數組,但我無法修復這個錯誤:寫入“new_arr”時緩沖區溢出:可寫大小是“newLength*1”字節,但可能會寫入 2 個字節

void regrow(char *&arr, int &length,int newLength) //Funcion to regrow an array
{
    char* new_arr = new char[newLength];
    for (int index = 0; index < length; index++)
    {
        new_arr[index] = arr[index];   //**Error occurs here** 
    }
    length = newLength;
    delete[] arr;
    arr = new_arr;
}

緩沖區溢出錯誤通常檢測您是否嘗試寫入未分配的空間,這可能是由於newLength小於可以通過 if-return 檢查避免的length本身:

#include <iostream>

void regrow(char *&arr, int &length,int newLength) //Funcion to regrow an array
{
    if(length >= newLength){ //Check for correct input
        return;
    }else{

    char* new_arr = new char[newLength];
    for (int index = 0; index < length; index++)
    {
        new_arr[index] = arr[index];   //**Error occurs here**
    }
    length = newLength;
    delete[] arr;
    arr = new_arr;
    }
}

int main()
{
    int a = 5;
    int b = 8;
    char*array = new char[a]{'C','B','a','d','f'};

    regrow(array,a,b);


    for(int i = 0; i < a; ++i){
        std::cout << array[i] << std::endl;
    }

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM