У меня возникли проблемы с созданием буфера в моем приложении C++. Я вынужден создать const char * const * buffer, чтобы я мог использовать функцию PQexecParams от libpq.С ++ приложение сбой при распределении const char * const buffer
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.5MB для буфера (например, запустить программу и указать размер 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.5Mb) для использования с PQexecParams?
['std :: vector buffer (size);'] (http://en.cppreference.com/w/cpp/container/vector) Использование 'buffer.data()' в качестве указателя. И обратите внимание, что поскольку ваш является буфером 'const char', как вы когда-либо ожидали, что сможете сохранить значения? –
BoBTFish
Не добавляйте теги для несвязанных языков. – Olaf
Возможный дубликат [Seg Fault при инициализации массива] (http://stackoverflow.com/questions/3815232/seg-fault-when-initializing-array) –