Physx 2.8.4 NxMeshData

I declare a NxMeshData called receiveBuffers to receive some information about cloth, but checkValid() function always tell me that my NxMeshData is wrong. what problem in my code?
there is my code:
void createLeaf(int InPos, NxSceneDesc sceneDesc,NxVec3 position)
{
NxClothMeshDesc meshDesc;
meshDesc.setToDefault();

//Fill the geometry   
meshDesc.numVertices  = NbVertex;        
meshDesc.numTriangles= NbTriangle;    
meshDesc.pointStrideBytes = sizeof(NxVec3);  
meshDesc.triangleStrideBytes= 3*sizeof(NxU32);  
meshDesc.points= (NxVec3*)malloc(sizeof(NxVec3)*meshDesc.numVertices);    
meshDesc.triangles= (NxU32*)malloc(sizeof(NxU32)*meshDesc.numTriangles*3);    
//Fill the geometry
int i,j;    
  
pos[InPos].resize(meshDesc.numVertices);
normal[InPos].resize(meshDesc.numVertices);
indices[InPos].resize(meshDesc.numTriangles*3);


NxVec3 *p = (NxVec3*)meshDesc.points; 
for(i = 0; i < NbVertex; i++){
	p->x = vertex[3*i]+position.x;
	p->y = vertex[3*i+1]+position.y;
	p->z = vertex[3*i+2]+position.z;
	p++;
}



//Fill the topology
NxU32 *id = (NxU32*)meshDesc.triangles;  
for (i = 0; i < NbTriangle*3 ; i++){
	NxU32 c = index[i];
	id[i] = c;
}


//Make sure everything is fine so far
if(!(meshDesc.isValid()))
   cerr<<"Mesh invalid."<<endl;

	
MemoryWriteBuffer wb;
if(!meshDesc.isValid())
	cout<<"erro";
if (!gCooking->NxCookClothMesh(meshDesc, wb))         
	return;

MemoryReadBuffer rb(wb.data);
NxClothMesh *mClothMesh = gScene->getPhysicsSDK().createClothMesh(rb);


NxClothDesc desc;  
NxMeshData receiveBuffers; 
   //Fill in receive buffers...
receiveBuffers.setToDefault();
desc.clothMesh = mClothMesh;

receiveBuffers.verticesPosBegin =&(pos[InPos][0].x);
receiveBuffers.indicesBegin = indices[InPos][0];
receiveBuffers.verticesNormalBegin = &(normal[InPos][0].x);
receiveBuffers.verticesPosByteStride    = sizeof(NxVec3);
receiveBuffers.verticesNormalByteStride = sizeof(NxVec3);
receiveBuffers.indicesByteStride        = sizeof(NxU32);
receiveBuffers.maxIndices               = NbTriangle*3;
receiveBuffers.maxVertices              = NbVertex;
receiveBuffers.numVerticesPtr           = &mNumVertices;
receiveBuffers.numIndicesPtr            = &mNumIndices;
receiveBuffers.dirtyBufferFlagsPtr = &mMeshDirtyFlags;
receiveBuffers.parentIndicesBegin       = (NxU32*)malloc(sizeof(NxU32)*NbVertex);
receiveBuffers.parentIndicesByteStride  = sizeof(NxU32);
receiveBuffers.maxParentIndices         = NbVertex;
receiveBuffers.numParentIndicesPtr      = &mNumParentIndices;


mMeshDirtyFlags = 0;
mNumVertices = 0;
mNumIndices = 0;
mNumParentIndices = 0;

desc.flags = NX_CLF_VISUALIZATION;
desc.meshData = receiveBuffers;
cout<<"check"<<receiveBuffers.checkValid()<<"\n";
if(!desc.isValid())
	cout<<"wrong";
mCloth = gScene->createCloth(desc);

}

Those checkValid functions are in the header files and you can step in to see why.