配列のサイズを変更しています。サイズ変更 (サイズを 2 倍にする) は正しく機能しているように見えますが、サイズ変更された配列にさらにテキストを送信すると、サイズ変更前の配列の制限に達すると、"Debug Assertion Failed! Expression: (L"バッファが小さすぎます" && 0)" エラー。私はそれをいくつかの異なる方法で試しましたが、常に同じ結果でした。
static int ReadBufferSize, totalChars;
static char *ReadBuffer = NULL;
ReadBuffer = (char *)malloc(ReadBufferSize);
...
//Double buffer size.
if((float)totalChars > (0.75f) * (float)ReadBufferSize)
{
char *tempBuffer = NULL;
tempBuffer = (char *)malloc(2 * ReadBufferSize);
if(tempBuffer == NULL)
free(tempBuffer);
else
{
memcpy(tempBuffer,ReadBuffer,strlen(ReadBuffer)+1);
free(ReadBuffer);
ReadBuffer = tempBuffer;
tempBuffer = NULL;
ReadBufferSize *= 2;
}
}
私のテストでは、ReadBufferSize は最初は 85 文字に設定されています。配列のサイズを変更するコードが実行された後、ReadBuffer 内のテキストは引き続き画面に表示されます。さらに文字を入力すると、それらが配列に送信され、そこから画面に表示されます。しかし、文字数が 85 文字に達すると、「Debug Assertion Failed! Expression: (L"Buffer is too small" && 0)」というエラーが表示されますが、170 文字分のスペースがあるはずです。私も次のことを試しました。
//Double buffer size.
if((float)totalChars > (0.75f) * (float)ReadBufferSize)
{
char* temp = 0;
temp = new char[2 * ReadBufferSize];
for(unsigned int i = 0; i < strlen(ReadBuffer); i++)
temp[i] = ReadBuffer[i];
temp[strlen(ReadBuffer)] = '\0';
delete[] ReadBuffer;
ReadBuffer = temp;
temp = 0;
ReadBufferSize *= 2;
}
私も試しました:
malloc(2 * ReadBufferSize * sizeof(char));
と:
strcpy_s(tempBuffer, strlen(ReadBuffer)+1, ReadBuffer);
どうもありがとう。