diff --git a/lib/decoding/openbts/AmrCoder.cpp b/lib/decoding/openbts/AmrCoder.cpp
index 718baf0..db5b2d8 100644
--- a/lib/decoding/openbts/AmrCoder.cpp
+++ b/lib/decoding/openbts/AmrCoder.cpp
@@ -24,11 +24,10 @@
 #include <iostream>
 #include <stdio.h>
 #include <sstream>
+#include <cstdlib>
 
 using namespace std;
 
-
-
 ViterbiTCH_AFS12_2::ViterbiTCH_AFS12_2()
 {
 	assert(mDeferral < 32);
@@ -378,7 +377,7 @@
 	assert(sz == decoder.iRate()*target.size());
 
 	// Build a "history" array where each element contains the full history.
-	uint32_t history[ctsz];
+	uint32_t * history = (uint32_t *)malloc(sizeof(uint32_t)*ctsz);
 	{
 		BitVector bits = in.sliced();
 		uint32_t accum = 0;
@@ -394,8 +393,8 @@
 	}
 
 	// Precompute metric tables.
-	float matchCostTable[ctsz];
-	float mismatchCostTable[ctsz];
+	float * matchCostTable = (float *)malloc(sizeof(float)*ctsz);
+	float * mismatchCostTable = (float *)malloc(sizeof(float)*ctsz);
 	{
 		const float *dp = in.begin();
 		for (size_t i=0; i<sz; i++) {
@@ -445,6 +444,9 @@
 			oCount++;
 		}
 	}
+	free(history);
+	free(matchCostTable);
+	free(mismatchCostTable);
 }
 
 
@@ -582,7 +584,7 @@
 	assert(sz == decoder.iRate()*target.size());
 
 	// Build a "history" array where each element contains the full history.
-	uint32_t history[ctsz];
+	uint32_t * history = (uint32_t *)malloc(sizeof(uint32_t)*ctsz);
 	{
 		BitVector bits = in.sliced();
 		uint32_t accum = 0;
@@ -598,8 +600,8 @@
 	}
 
 	// Precompute metric tables.
-	float matchCostTable[ctsz];
-	float mismatchCostTable[ctsz];
+	float * matchCostTable = (float *)malloc(sizeof(float)*ctsz);
+	float * mismatchCostTable = (float *)malloc(sizeof(float)*ctsz);
 	{
 		const float *dp = in.begin();
 		for (size_t i=0; i<sz; i++) {
@@ -649,6 +651,9 @@
 			oCount++;
 		}
 	}
+	free(history);
+	free(matchCostTable);
+	free(mismatchCostTable);
 }
 
 
@@ -786,7 +791,7 @@
 	assert(sz == decoder.iRate()*target.size());
 
 	// Build a "history" array where each element contains the full history.
-	uint32_t history[ctsz];
+	uint32_t * history = (uint32_t *)malloc(sizeof(uint32_t)*ctsz);
 	{
 		BitVector bits = in.sliced();
 		uint32_t accum = 0;
@@ -802,8 +807,8 @@
 	}
 
 	// Precompute metric tables.
-	float matchCostTable[ctsz];
-	float mismatchCostTable[ctsz];
+	float * matchCostTable = (float *)malloc(sizeof(float)*ctsz);
+	float * mismatchCostTable = (float *)malloc(sizeof(float)*ctsz);
 	{
 		const float *dp = in.begin();
 		for (size_t i=0; i<sz; i++) {
@@ -853,6 +858,9 @@
 			oCount++;
 		}
 	}
+	free(history);
+	free(matchCostTable);
+	free(mismatchCostTable);
 }
 
 
@@ -990,7 +998,7 @@
 	assert(sz == decoder.iRate()*target.size());
 
 	// Build a "history" array where each element contains the full history.
-	uint32_t history[ctsz];
+	uint32_t * history = (uint32_t *)malloc(sizeof(uint32_t)*ctsz);
 	{
 		BitVector bits = in.sliced();
 		uint32_t accum = 0;
@@ -1006,8 +1014,8 @@
 	}
 
 	// Precompute metric tables.
-	float matchCostTable[ctsz];
-	float mismatchCostTable[ctsz];
+	float * matchCostTable = (float *)malloc(sizeof(float)*ctsz);
+	float * mismatchCostTable = (float *)malloc(sizeof(float)*ctsz);
 	{
 		const float *dp = in.begin();
 		for (size_t i=0; i<sz; i++) {
@@ -1057,6 +1065,9 @@
 			oCount++;
 		}
 	}
+	free(history);
+	free(matchCostTable);
+	free(mismatchCostTable);
 }
 
 
@@ -1196,7 +1207,7 @@
 	assert(sz == decoder.iRate()*target.size());
 
 	// Build a "history" array where each element contains the full history.
-	uint32_t history[ctsz];
+	uint32_t * history = (uint32_t *)malloc(sizeof(uint32_t)*ctsz);
 	{
 		BitVector bits = in.sliced();
 		uint32_t accum = 0;
@@ -1212,8 +1223,8 @@
 	}
 
 	// Precompute metric tables.
-	float matchCostTable[ctsz];
-	float mismatchCostTable[ctsz];
+	float * matchCostTable = (float *)malloc(sizeof(float)*ctsz);
+	float * mismatchCostTable = (float *)malloc(sizeof(float)*ctsz);
 	{
 		const float *dp = in.begin();
 		for (size_t i=0; i<sz; i++) {
@@ -1263,6 +1274,9 @@
 			oCount++;
 		}
 	}
+	free(history);
+	free(matchCostTable);
+	free(mismatchCostTable);
 }
 
 
@@ -1402,7 +1416,7 @@
 	assert(sz == decoder.iRate()*target.size());
 
 	// Build a "history" array where each element contains the full history.
-	uint32_t history[ctsz];
+	uint32_t * history = (uint32_t *)malloc(sizeof(uint32_t)*ctsz);
 	{
 		BitVector bits = in.sliced();
 		uint32_t accum = 0;
@@ -1418,8 +1432,8 @@
 	}
 
 	// Precompute metric tables.
-	float matchCostTable[ctsz];
-	float mismatchCostTable[ctsz];
+	float * matchCostTable = (float *)malloc(sizeof(float)*ctsz);
+	float * mismatchCostTable = (float *)malloc(sizeof(float)*ctsz);
 	{
 		const float *dp = in.begin();
 		for (size_t i=0; i<sz; i++) {
@@ -1469,6 +1483,9 @@
 			oCount++;
 		}
 	}
+	free(history);
+	free(matchCostTable);
+	free(mismatchCostTable);
 }
 
 
@@ -1610,7 +1627,7 @@
 	assert(sz == decoder.iRate()*target.size());
 
 	// Build a "history" array where each element contains the full history.
-	uint32_t history[ctsz];
+	uint32_t * history = (uint32_t *)malloc(sizeof(uint32_t)*ctsz);
 	{
 		BitVector bits = in.sliced();
 		uint32_t accum = 0;
@@ -1626,8 +1643,8 @@
 	}
 
 	// Precompute metric tables.
-	float matchCostTable[ctsz];
-	float mismatchCostTable[ctsz];
+	float * matchCostTable = (float *)malloc(sizeof(float)*ctsz);
+	float * mismatchCostTable = (float *)malloc(sizeof(float)*ctsz);
 	{
 		const float *dp = in.begin();
 		for (size_t i=0; i<sz; i++) {
@@ -1677,6 +1694,9 @@
 			oCount++;
 		}
 	}
+	free(history);
+	free(matchCostTable);
+	free(mismatchCostTable);
 }
 
 
@@ -1818,7 +1838,7 @@
 	assert(sz == decoder.iRate()*target.size());
 
 	// Build a "history" array where each element contains the full history.
-	uint32_t history[ctsz];
+	uint32_t * history = (uint32_t *)malloc(sizeof(uint32_t)*ctsz);
 	{
 		BitVector bits = in.sliced();
 		uint32_t accum = 0;
@@ -1834,8 +1854,8 @@
 	}
 
 	// Precompute metric tables.
-	float matchCostTable[ctsz];
-	float mismatchCostTable[ctsz];
+	float * matchCostTable = (float *)malloc(sizeof(float)*ctsz);
+	float * mismatchCostTable = (float *)malloc(sizeof(float)*ctsz);
 	{
 		const float *dp = in.begin();
 		for (size_t i=0; i<sz; i++) {
@@ -1885,6 +1905,9 @@
 			oCount++;
 		}
 	}
+	free(history);
+	free(matchCostTable);
+	free(mismatchCostTable);
 }
 
 
diff --git a/lib/decoding/openbts/ViterbiR204.cpp b/lib/decoding/openbts/ViterbiR204.cpp
index 296e292..fe31aad 100644
--- a/lib/decoding/openbts/ViterbiR204.cpp
+++ b/lib/decoding/openbts/ViterbiR204.cpp
@@ -28,6 +28,7 @@
 #include <stdio.h>
 #include <sstream>
 #include <string.h>
+#include <cstdlib>
 
 using namespace std;
 
@@ -70,7 +71,7 @@
 	assert(sz*coder.iRate() == target.size());
 
 	// Build a "history" array where each element contains the full history.
-	uint32_t history[sz];
+	uint32_t * history = (uint32_t *) malloc(sizeof(uint32_t)*sz);
 	uint32_t accum = 0;
 	for (size_t i=0; i<sz; i++) {
 		accum = (accum<<1) | in.bit(i);
@@ -85,6 +86,7 @@
 			*op++ = coder.stateTable(g,index);
 		}
 	}
+	free(history);
 }
 
 
@@ -224,7 +226,7 @@
 
 	// Build a "history" array where each element contains the full history.
 	// (pat) We only use every other history element, so why are we setting them?
-	uint32_t history[ctsz];
+	uint32_t * history = (uint32_t *)malloc(sizeof(uint32_t)*ctsz);
 	{
 		BitVector bits = in.sliced();
 		uint32_t accum = 0;
@@ -241,8 +243,8 @@
 	}
 
 	// Precompute metric tables.
-	float matchCostTable[ctsz];
-	float mismatchCostTable[ctsz];
+	float * matchCostTable = (float *)malloc(sizeof(float)*ctsz);
+	float * mismatchCostTable = (float *)malloc(sizeof(float)*ctsz);
 	{
 		const float *dp = in.begin();
 		for (size_t i=0; i<sz; i++) {
@@ -296,6 +298,9 @@
 		// Dont think minCost == NULL can happen.
 		mBitErrorCnt = minCost ? minCost->bitErrorCnt : 0;
 	}
+	free(history);
+	free(matchCostTable);
+	free(mismatchCostTable);
 }
 
 // vim: ts=4 sw=4
