diff --git ext/fts2/fts2_icu.c ext/fts2/fts2_icu.c
index 6b9687e..a8b8359 100644
--- ext/fts2/fts2_icu.c
+++ ext/fts2/fts2_icu.c
@@ -118,15 +118,15 @@ static int icuOpen(
   nChar = nInput+1;
   pCsr = (IcuCursor *)sqlite3_malloc(
       sizeof(IcuCursor) +                /* IcuCursor */
-      nChar * sizeof(UChar) +            /* IcuCursor.aChar[] */
-      (nChar+1) * sizeof(int)            /* IcuCursor.aOffset[] */
+      (nChar+1) * sizeof(int) +          /* IcuCursor.aOffset[] */
+      nChar * sizeof(UChar)              /* IcuCursor.aChar[] */
   );
   if( !pCsr ){
     return SQLITE_NOMEM;
   }
   memset(pCsr, 0, sizeof(IcuCursor));
-  pCsr->aChar = (UChar *)&pCsr[1];
-  pCsr->aOffset = (int *)&pCsr->aChar[nChar];
+  pCsr->aOffset = (int *)&pCsr[1];
+  pCsr->aChar = (UChar *)&pCsr->aOffset[nChar+1];
 
   pCsr->aOffset[iOut] = iInput;
   U8_NEXT(zInput, iInput, nInput, c); 
diff --git ext/fts3/fts3_icu.c ext/fts3/fts3_icu.c
index a75b14a..e406168 100644
--- ext/fts3/fts3_icu.c
+++ ext/fts3/fts3_icu.c
@@ -118,15 +118,15 @@ static int icuOpen(
   nChar = nInput+1;
   pCsr = (IcuCursor *)sqlite3_malloc(
       sizeof(IcuCursor) +                /* IcuCursor */
-      nChar * sizeof(UChar) +            /* IcuCursor.aChar[] */
-      (nChar+1) * sizeof(int)            /* IcuCursor.aOffset[] */
+      (nChar+1) * sizeof(int) +          /* IcuCursor.aOffset[] */
+      nChar * sizeof(UChar)              /* IcuCursor.aChar[] */
   );
   if( !pCsr ){
     return SQLITE_NOMEM;
   }
   memset(pCsr, 0, sizeof(IcuCursor));
-  pCsr->aChar = (UChar *)&pCsr[1];
-  pCsr->aOffset = (int *)&pCsr->aChar[nChar];
+  pCsr->aOffset = (int *)&pCsr[1];
+  pCsr->aChar = (UChar *)&pCsr->aOffset[nChar+1];
 
   pCsr->aOffset[iOut] = iInput;
   U8_NEXT(zInput, iInput, nInput, c);