Compute a length based on heap size instead of card table size.

The card from address computation checks that the argument is a valid
card.  However, the limit points just past the end of the last card so
it is often invalid.  This fixes a crash in asserts-enabled builds.

Change-Id: I5d7f0a4753703f82b2e1be520e6108d1b61b22d3
diff --git a/vm/alloc/CardTable.c b/vm/alloc/CardTable.c
index bbbb4ad..2de586e 100644
--- a/vm/alloc/CardTable.c
+++ b/vm/alloc/CardTable.c
@@ -179,8 +179,8 @@
             moveCardsToModUnion((u1*)base[i], (u1*)limit[i]);
         } else {
             u1 *baseCard = dvmCardFromAddr((u1*)base[i]);
-            u1 *limitCard = dvmCardFromAddr((u1*)limit[i]);
-            memset(baseCard, GC_CARD_CLEAN, limitCard - baseCard);
+            size_t length = (limit[i] - base[i]) >> GC_CARD_SHIFT;
+            memset(baseCard, GC_CARD_CLEAN, length);
         }
     }
 }