How use ZeroC ICE ThirdParty in UE4

here is my code:
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.

#include "myGame4.h"
#include "myGame4GameMode.h"
#include "myGame4Character.h"


#include "ice/MyPrinterI.h"

#include "AllowWindowsPlatformTypes.h"

#pragma push_macro("check")
#pragma push_macro("verify")
#undef check
#undef verify
#include <Ice/Ice.h>
#include <IceUtil/IceUtil.h>
#include <Printer.h>
#pragma pop_macro("verify")
#pragma pop_macro("check")

#include <StringConv.h>


Ice::CommunicatorPtr ic;
static Ice::ObjectPtr object;

class PrinterI : public Demo::Printer {
public:
	virtual void printString(const string& s, const Ice::Current&);
};

void PrinterI::printString(const string& s, const Ice::Current&)
{
	wstring wstr = IceUtil::stringToWstring(s);
	FString str = FString(wstr.c_str());
	UE_LOG(LogTemp, Error, TEXT("from ice msg:%s"), *(str));
}
//UPROPERTY()
//Ice::ObjectPtr object;
AmyGame4GameMode::AmyGame4GameMode()
{
	// set default pawn class to our Blueprinted character
	static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/ThirdPersonCPP/Blueprints/ThirdPersonCharacter"));
	if (PlayerPawnBPClass.Class != NULL)
	{
		DefaultPawnClass = PlayerPawnBPClass.Class;
	}
	if (object == NULL)
	{
		object = new PrinterI;
	}
}
void AmyGame4GameMode::BeginPlay()
{
	
	ic = Ice::initialize();
	try {
		Ice::ObjectAdapterPtr adapter =
			ic->createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 20001 -h 127.0.0.1");
		
		

		adapter->add(object, ic->stringToIdentity("SimplePrinter"));
		adapter->activate();
		UE_LOG(LogTemp, Error, TEXT("ice start success 测试中文"));
	}
	catch (const Ice::Exception& e) {
		cerr << e << endl;
		UE_LOG(LogTemp, Error, TEXT("ICE 异常"));
	}
	catch (const char* msg) {
		cerr << msg << endl;
		UE_LOG(LogTemp, Error, TEXT("ICE 异常"));
	}
	
	Super::BeginPlay();
}
void AmyGame4GameMode::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
	UE_LOG(LogTemp, Error, TEXT("游戏结束"));
	ic->shutdown();
	ic->destroy();
	UE_LOG(LogTemp, Error, TEXT("Ice销毁"));
	Super::EndPlay(EndPlayReason);
}

This is my JAVA code

public class Client {
	public static void main(String[] args) {
		Communicator ic = Ice.Util.initialize();
		PrinterPrx twoway = PrinterPrxHelper.checkedCast(ic.stringToProxy("SimplePrinter:default -p 20001 -h 127.0.0.1"));
		for (int i = 0; i < 10; i++) {
			twoway.printString("msg"+i);
			System.out.println("send:" + i);
		}
		ic.shutdown();
		ic.destroy();
	}
}

When i send some short string msg it’s OK but,when i send a long string its’s crashed

 	myGame4-Win64-DebugGame.exe!FMallocBinned::FreeInternal(void *)	C++
 	myGame4-Win64-DebugGame.exe!operator delete(void * Ptr) 行 6	C++
 	[外部代码]	
>	myGame4-Win64-DebugGame.exe!PrinterI::printString(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & s, const Ice::Current & __formal) 行 38	C++
 	myGame4-Win64-DebugGame.exe!Demo::Printer::___printString(IceInternal::Incoming & __inS, const Ice::Current & __current) 行 171	C++
 	ice36.dll!000000006ccdaa71()	未知
 	ice36.dll!000000006ccbae7b()	未知
 	ice36.dll!000000006ccb7214()	未知
 	ice36.dll!000000006ccbc397()	未知
 	ice36.dll!000000006cdc14c2()	未知
 	ice36.dll!000000006cdc105e()	未知
 	iceutil36.dll!000000006cc0f6af()	未知
 	[外部代码]	

I do not know where I was wrong

Thanks