Missing 3D Objects

I am generating a random maze and trying to fill the walls with a simple draw cube function. The problem is that only one line of cubes appears and I am not sure what’s wrong with my code here. Any help would be greatly appreciated.

// Glut.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <GL\freeglut.h>
#include <stdlib.h>
#include <math.h>
#include <vector>
#include <iostream>
#include <ctime>
#include <algorithm>
float xpos = 0, ypos = 0, zpos = 0, xrot = 0, yrot = 0, angle = 0.0;
float lastx, lasty;
int ** originMaze;
int mazeh;
int mazew;
const GLfloat HALF_CUBE = 1.25f;
const GLfloat FULL_CUBE = HALF_CUBE + HALF_CUBE;
void cube(GLfloat, GLfloat, GLfloat);
void generateRandomDirections(std::vector<int>&);
int** generateMaze(int**, int, int);
void recursion(int, int, int **, int, int);


void enable(void) {
	glEnable(GL_DEPTH_TEST); 
	glEnable(GL_LIGHTING); 
	glEnable(GL_LIGHT0); 
	glShadeModel(GL_SMOOTH); 

}

void camera(void) {
	glRotatef(xrot, 1.0, 0.0, 0.0);  
	glRotatef(yrot, 0.0, 1.0, 0.0);  
	glTranslated(-xpos, -ypos, -zpos); 
}

void display(void) {
	glClearColor(0.0, 0.0, 0.0, 1.0); 
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
	glLoadIdentity();
	camera();
	enable();
	glBegin(GL_QUADS);
	for (int i = 0;i < mazeh;i++)
		for (int j = 0;j < mazew;j++)
			if (originMaze[i][j] == 1)
				cube(i*4, j*4, 0);
	glEnd();
	glutSwapBuffers(); 
	angle++; 
}

void reshape(int w, int h) {
	glViewport(0, 0, (GLsizei)w, (GLsizei)h); 
	glMatrixMode(GL_PROJECTION); 
	glLoadIdentity();
	gluPerspective(60, (GLfloat)w / (GLfloat)h, 1.0, 1000.0); 
	glMatrixMode(GL_MODELVIEW); 

}

void keyboard(unsigned char key, int x, int y) {
	if (key == 'q')
	{
		xrot += 1;
		if (xrot >360) xrot -= 360;
	}

	if (key == 'z')
	{
		xrot -= 1;
		if (xrot < -360) xrot += 360;
	}

	if (key == 'w')
	{
		float xrotrad, yrotrad;
		yrotrad = (yrot / 180 * 3.141592654f);
		xrotrad = (xrot / 180 * 3.141592654f);
		xpos += float(sin(yrotrad));
		zpos -= float(cos(yrotrad));
		ypos -= float(sin(xrotrad));
	}

	if (key == 's')
	{
		float xrotrad, yrotrad;
		yrotrad = (yrot / 180 * 3.141592654f);
		xrotrad = (xrot / 180 * 3.141592654f);
		xpos -= float(sin(yrotrad));
		zpos += float(cos(yrotrad));
		ypos += float(sin(xrotrad));
	}

	if (key == 'd')
	{
		float yrotrad;
		yrotrad = (yrot / 180 * 3.141592654f);
		xpos += float(cos(yrotrad)) * 0.2;
		zpos += float(sin(yrotrad)) * 0.2;
	}

	if (key == 'a')
	{
		float yrotrad;
		yrotrad = (yrot / 180 * 3.141592654f);
		xpos -= float(cos(yrotrad)) * 0.2;
		zpos -= float(sin(yrotrad)) * 0.2;
	}

	if (key == 27)
	{
		exit(0);
	}
}

void mouseMovement(int x, int y) {
	int diffx = x - lastx; 
	int diffy = y - lasty; 
	lastx = x;
	lasty = y;
	xrot += (float)diffy;
	yrot += (float)diffx;
}

int main(int argc, char **argv) {
	srand(time(0));
	int ** maze = new int*[2];
	mazeh = 30;
	mazew = 30;
	maze = generateMaze(maze, 30, 30);
	originMaze = maze;
	for (int i = 0;i <mazeh;i++)
	{
		for (int j = 0;j < mazew;j++)
			std::cout << maze[i][j];
		std::cout << std::endl;
	}
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
	glutInitWindowSize(500, 500);
	glutInitWindowPosition(100, 100);
	glutCreateWindow("Maze");
	glutDisplayFunc(display);
	glutIdleFunc(display);
	glutReshapeFunc(reshape);

	glutPassiveMotionFunc(mouseMovement);

	glutKeyboardFunc(keyboard);
	glutMainLoop();
	return 0;
}



int** generateMaze(int** maze, int height, int width) {
	delete[] maze;
	maze = new int*[height];
	for (int i = 0;i < height;i++)
		maze[i] = new int[width];
	for (int i = 0; i < height; i++)
		for (int j = 0; j < width; j++)
			maze[i][j] = 1;
	int r = rand() % height;
	while (r % 2 == 0) {
		r = rand() % height;
	}
	int c = rand() % width;
	while (c % 2 == 0) {
		c = rand() % width;
	}
	maze[r][c] = 0;
	recursion(r, c, maze, height, width);
	return maze;
}

void recursion(int r, int c, int ** maze, int height, int width) {
	std::vector<int> x;
	generateRandomDirections(x);
	for (int i = 0; i < x.size(); i++) {

		switch (x[i]) {
		case 1: 
			if (r - 2 <= 0)
				continue;
			if (maze[r - 2][c] != 0) {
				maze[r - 2][c] = 0;
				maze[r - 1][c] = 0;
				recursion(r - 2, c, maze, height, width);
			}
			break;
		case 2: 
			if (c + 2 >= width - 1)
				continue;
			if (maze[r][c + 2] != 0) {
				maze[r][c + 2] = 0;
				maze[r][c + 1] = 0;
				recursion(r, c + 2, maze, height, width);
			}
			break;
		case 3:
			if (r + 2 >= height - 1)
				continue;
			if (maze[r + 2][c] != 0) {
				maze[r + 2][c] = 0;
				maze[r + 1][c] = 0;
				recursion(r + 2, c, maze, height, width);
			}
			break;
		case 4:
			if (c - 2 <= 0)
				continue;
			if (maze[r][c - 2] != 0) {
				maze[r][c - 2] = 0;
				maze[r][c - 1] = 0;
				recursion(r, c - 2, maze, height, width);
			}
			break;
		}
	}

}

void generateRandomDirections(std::vector<int> &x) {
	for (int i = 0; i < 4; i++)
		x.push_back(i + 1);
	std::random_shuffle(x.begin(), x.end());
}

void cube(GLfloat x, GLfloat y, GLfloat z) //Draws a cube centered at (x,y,z)
{
	glPushMatrix();
	glTexCoord2d(1.0, 1.0);
	glVertex3f(x + HALF_CUBE, HALF_CUBE, z - HALF_CUBE);
	glTexCoord2d(0.0, 1.0);
	glVertex3f(x - HALF_CUBE, HALF_CUBE, z - HALF_CUBE);
	glTexCoord2d(0.0, 0.0);
	glVertex3f(x - HALF_CUBE, HALF_CUBE, z + HALF_CUBE); 
	glTexCoord2d(1.0, 0.0);
	glVertex3f(x + HALF_CUBE, HALF_CUBE, z + HALF_CUBE); 

														
	glTexCoord2d(1.0, 1.0);
	glVertex3f(x + HALF_CUBE, -HALF_CUBE, z + HALF_CUBE); 
	glTexCoord2d(0.0, 1.0);
	glVertex3f(x - HALF_CUBE, -HALF_CUBE, z + HALF_CUBE); 
	glTexCoord2d(0.0, 0.0);
	glVertex3f(x - HALF_CUBE, -HALF_CUBE, z - HALF_CUBE); 
	glTexCoord2d(1.0, 0.0);
	glVertex3f(x + HALF_CUBE, -HALF_CUBE, z - HALF_CUBE); 

														  
	glTexCoord2d(1.0, 1.0);
	glVertex3f(x + HALF_CUBE, HALF_CUBE, z + HALF_CUBE);
	glTexCoord2d(0.0, 1.0);
	glVertex3f(x - HALF_CUBE, HALF_CUBE, z + HALF_CUBE); 
	glTexCoord2d(0.0, 0.0);
	glVertex3f(x - HALF_CUBE, -HALF_CUBE, z + HALF_CUBE); 
	glTexCoord2d(1.0, 0.0);
	glVertex3f(x + HALF_CUBE, -HALF_CUBE, z + HALF_CUBE);

														  
	glTexCoord2d(1.0, 1.0);
	glVertex3f(x - HALF_CUBE, HALF_CUBE, z - HALF_CUBE); 
	glTexCoord2d(0.0, 1.0);
	glVertex3f(x + HALF_CUBE, HALF_CUBE, z - HALF_CUBE); 
	glTexCoord2d(0.0, 0.0);
	glVertex3f(x + HALF_CUBE, -HALF_CUBE, z - HALF_CUBE); 
	glTexCoord2d(1.0, 0.0);
	glVertex3f(x - HALF_CUBE, -HALF_CUBE, z - HALF_CUBE); 

														  
	glTexCoord2d(1.0, 1.0);
	glVertex3f(x - HALF_CUBE, HALF_CUBE, z + HALF_CUBE); 
	glTexCoord2d(0.0, 1.0);
	glVertex3f(x - HALF_CUBE, HALF_CUBE, z - HALF_CUBE);
	glTexCoord2d(0.0, 0.0);
	glVertex3f(x - HALF_CUBE, -HALF_CUBE, z - HALF_CUBE);
	glTexCoord2d(1.0, 0.0);
	glVertex3f(x - HALF_CUBE, -HALF_CUBE, z + HALF_CUBE);

														  
	glTexCoord2d(1.0, 1.0);
	glVertex3f(x + HALF_CUBE, HALF_CUBE, z - HALF_CUBE); 
	glTexCoord2d(0.0, 1.0);  
	glVertex3f(x + HALF_CUBE, HALF_CUBE, z + HALF_CUBE); 
	glTexCoord2d(0.0, 0.0);
	glVertex3f(x + HALF_CUBE, -HALF_CUBE, z + HALF_CUBE); 
	glTexCoord2d(1.0, 0.0);
	glVertex3f(x + HALF_CUBE, -HALF_CUBE, z - HALF_CUBE); 
	glPopMatrix();
}