Приложение 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], Вектор освободит выделенную память в своем деструкторе.

Другие вопросы по тегам