std::bad_alloc运行时异常
std::bad_alloc runtime exception
当for
循环到达第二轮时,我在服务器端收到 std::bad_aloc 异常。这是代码:
void UDP_ProcessClient (int socketFileDescriptor, void *transmitBuffer, void *receiveBuffer, size_t transmitBufferSize, struct sockaddr *clientAddress, socklen_t clientAddressLength, char *workDir, size_t fileNumber)
{
size_t i;
size_t bufferSize = 0;
string resultName, imageName;
for (i = 0; i < 6; i++)
{
/// Start communicating (read/write)
/// Prepare buffers for communication
cout << "[Server]: Receiving data from client..." << endl;
UDP_ReceiveData(socketFileDescriptor, (uint32_t *) &bufferSize, sizeof(bufferSize), MSG_WAITALL, clientAddress, &clientAddressLength); /// Get required data buffer size
//cout << "[Server]: PHPDHPHPHFPSADHFI" << endl;
receiveBuffer = new uint8_t[bufferSize]; /// Allocate memory
clog << "Receiving file of size " << bufferSize << endl;
UDP_ReceiveData(socketFileDescriptor, (int8_t *) receiveBuffer, bufferSize, MSG_WAITALL, clientAddress, &clientAddressLength); /// Read data
//cout << "SDFDSFDSFFADSFASDFSDVLALALL " << bufferSize << endl;
cout << 'a';
cout << "[Server]: Data received successful" << endl;
/// Save image.bmp file
resultName = workDir;
imageName = "image_" + to_string(fileNumber) + ".jai";
resultName += imageName;
createImageFromBuffer((uint8_t *) receiveBuffer, bufferSize, resultName);
/// Clear memory
bufferSize = 0;
delete[] (uint8_t *) receiveBuffer;
}
}
在每次分配内存后,new []
在回合开始时,我不会忘记在每轮结束时释放delete []
它。 收到的所有文件大小相同。我可以显示客户端代码,但我认为它工作正常。
客户端代码:
for (i = 0; i < 6; i++)
{
/// Do useful work (payload)
/// Prepare files
imageFileFullName = pathToImageFiles + imageFileName + std::to_string(i) + imageFileFormat;
std::clog << "Opening file..." << std::endl;
imageFile = new std::fstream;
imageFile->open(imageFileFullName, std::ios::in | std::ios::binary | std::ios::ate);
//checkFileOpened(imageFile);
if (!(imageFile->is_open()))
{
std::cerr << "Can't open file " << imageFileFullName << ": ";
perror("");
exit(EXIT_FAILURE);
}
imageFileSize = imageFile->tellg();
imageFile->seekg(0, std::ios::beg);
/// Prepare transmit buffer
transmitBuffer = new uint8_t[imageFileSize];
std::cout << "Reading file..." << std::endl;
imageFile->read((char *) transmitBuffer, imageFileSize);
imageFile->close();
delete imageFile; /// Delete used file
/// Send/Receive Data to/from Server
std::cout << "Sending file..." << std::endl;
UDP_SendData(socketFileDescriptor, &imageFileSize, sizeof(imageFileSize), MSG_CONFIRM, (struct sockaddr *) addressIterator_Pointer->ai_addr, addressIterator_Pointer->ai_addrlen);
UDP_SendBigPacket(socketFileDescriptor, (uint8_t *) transmitBuffer, imageFileSize, MSG_CONFIRM, (struct sockaddr *) addressIterator_Pointer->ai_addr, addressIterator_Pointer->ai_addrlen);
delete[] transmitBuffer; /// Free memory
}
...
服务器端的运行时异常:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted
一种可能的解释可能是bufferSize太大了。如果可能,请尝试调试代码,或打印出 bufferSize 以查看它。
相关文章:
- 我在c++代码中生成了一个运行时#3异常
- 在 c++ 中将集合转换为向量和向量转换为字符串时出现运行时异常
- std::bad_alloc运行时异常
- 如何在运行时之前检测logic_error异常?
- 获取指向派生类的指针在 C++ 中以运行时异常结束
- 将一个数组复制到函数内的另一个数组时的运行时指针异常
- GCC (libstdc++) 运行时如何在异常处于活动状态时决定终止 ()
- 声明一个额外的变量会导致运行时出现异常
- 使用std ::函数时运行时异常.他们为什么不指向有效的代码
- 从 WebAPI 项目运行静态类时出现 StackOverflow 异常 - 从控制台应用程序运行时工作正常
- 运行时异常消息而不扩展 std::exception
- 包含boost::asio标头时引发运行时异常
- 为什么在使用sharedptr时会出现运行时异常
- const_cast用法给了我运行时异常
- 如何在c++中定义运行时异常
- C++中出现奇怪的运行时异常
- Regex_match抛出运行时异常
- 我使用指针分配了一个动态的字符数组,它得到了运行时异常
- 获取"this"对象到另一个函数的shared_ptr:给出运行时异常
- 为什么在vector中的shared_ptr上调用方法会抛出运行时异常?