Приложение C++ аварийно завершает работу при выделении буфера const char* const
У меня проблемы с созданием буфера в моем приложении C++. Я вынужден создать буфер const char* const*, чтобы я мог использовать функцию libqq PQexecParams.
PGresult *PQexecParams(PGconn *conn,
const char *command,
int nParams,
const Oid *paramTypes,
const char * const *paramValues,
const int *paramLengths,
const int *paramFormats,
int resultFormat);
Вот некоторый код, чтобы воспроизвести проблему, я получаю исключения STATUS_STACK_OVERFLOW, когда я выделяю для буфера что-либо более 2,5 МБ (например, запускаю программу и указываю размер 2621440).
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
cout << "Buffer size Testing" << endl;
cout << "==========================" << endl;
int size;
cout << "Size of buffer?" << endl;
cout << "Size: ";
cin >> size;
try {
const char * const *buffer[size];
} catch (...){
cout << "An error was encountered!" << endl;
exit(1);
}
return 0;
}
Как правильно создать большой буфер (2,5 МБ) для использования с PQexecParams?
1 ответ
Ваш код выполняет выделение большого массива указателей в стеке, поэтому вы получаете исключение переполнения стека.
Правильный способ размещения буфера в куче:
char* buffer = new char[size]; // add consts where you need them
Тем не менее, я бы следовал предложению @BoBTFish и просто использовал:
std::vector<char> buffer(size);
Вы можете получить доступ к буферу данных либо buffer.data()
или взяв адрес первого элемента: &buffer[0]
, Вектор освободит выделенную память в своем деструкторе.