众所周知,C++普通方法创建数组时,尺寸指定必须是个常数,不能是变量,比如:
int length = 100;
char message[length]; // error
动态分配方式在堆区构造数组,之后要手动释放
\quad\quad 如果该数组的生命周期只需要存在很短的时间,比如存储错误信息,之后打印到屏幕就结束其生命周期。这种情况如果每次都动态分配,几行代码之后手动释放。可以但没有必要
// C++
char* message = new char[size];
delete [] message;
// C
char* message = (char*)malloc(size*sizeof(char))
free(message);
利用alloca()栈区动态分配
\quad\quad 有时候我们只是想暂时打印日志信息或者错误信息,并不需要长期保存其内容,随着程序运行超出数组作用域,内存自动释放。下次需要的时候再动态的申请,不用管理释放,这样很方便
if(!result)
{
int length;
length = getLogLength(); //凭空捏造的函数
char* message = (char*)alloca(sizeof(char) * length);
message = getLogInformation(); //凭空捏造的函数
std:cout << message << std::endl;
}