重新生成数组时出错:写入时缓冲区溢出
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;
}
缓冲区溢出错误通常会检测您是否尝试写入未分配的
space 这可能是由于 newLength
小于 length
本身
这可以通过 if-return 检查来避免:
#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;
}
所以我试图重新生成这个一维动态数组,但我无法修复这个错误: 写入'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;
}
缓冲区溢出错误通常会检测您是否尝试写入未分配的
space 这可能是由于 newLength
小于 length
本身
这可以通过 if-return 检查来避免:
#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;
}