I am attempting to compile some code that I got in an ISO document for barcode generation. When I try to compile it in MS Visual C++, I get the following error:

mappings.cpp(147) : error C2440: '=' : cannot convert from 'void *' to 'int *'
I have put the line in question in bold and red below. Does anyone have any suggestions? Thanks in advance.

Code:
#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>

int nrow, ncol, *array;

/* "module" places "chr+bit" with appropriate wrapping within array[] */
void module(int row, int col, int chr, int bit)
{
	if (row < 0) { row += nrow; col += 4 - ((nrow+4)%8); }
	if (col < 0) { col += ncol; row += 4 - ((ncol+4)%8); }
	array[row*ncol+col] = 10*chr + bit;
}


/* "utah" places the 8 bits of a utah-shaped symbol character in ECC200 */
void utah(int row, int col, int chr)
{ 
	module(row-2,col-2,chr,1);
	module(row-2,col-1,chr,2);
	module(row-1,col-2,chr,3);
	module(row-1,col-1,chr,4);
	module(row-1,col,chr,5);
	module(row,col-2,chr,6);
	module(row,col-1,chr,7);
	module(row,col,chr,8);
}


/* "cornerN" places 8 bits of the four special corner cases in ECC200 */
void corner1(int chr)
{
	module(nrow-1,0,chr,1);
	module(nrow-1,1,chr,2);
	module(nrow-1,2,chr,3);
	module(0,ncol-2,chr,4);
	module(0,ncol-1,chr,5);
	module(1,ncol-1,chr,6);
	module(2,ncol-1,chr,7);
	module(3,ncol-1,chr,8);
}

void corner2(int chr)
{ 
	module(nrow-3,0,chr,1);
	module(nrow-2,0,chr,2);
	module(nrow-1,0,chr,3);
	module(0,ncol-4,chr,4);
	module(0,ncol-3,chr,5);
	module(0,ncol-2,chr,6);
	module(0,ncol-1,chr,7);
	module(1,ncol-1,chr,8);
}

void corner3(int chr)
{ 
	module(nrow-3,0,chr,1);
	module(nrow-2,0,chr,2);
	module(nrow-1,0,chr,3);
	module(0,ncol-2,chr,4);
	module(0,ncol-1,chr,5);
	module(1,ncol-1,chr,6);
	module(2,ncol-1,chr,7);
	module(3,ncol-1,chr,8);
}

void corner4(int chr)
{ 
	module(nrow-1,0,chr,1);
	module(nrow-1,ncol-1,chr,2);
	module(0,ncol-3,chr,3);
	module(0,ncol-2,chr,4);
	module(0,ncol-1,chr,5);
	module(1,ncol-3,chr,6);
	module(1,ncol-2,chr,7);
	module(1,ncol-1,chr,8);
}


/* "ecc200" fills an nrow x ncol array with appropriate values for ECC200 */
void ecc200(void)
{ 
	int row, col, chr;

	/* First, fill the array[] with invalid entries */
	for (row=0; row<nrow; row++) {

		for (col=0; col<ncol; col++) {
			array[row*ncol+col] = 0;
		}
	}


/* Starting in the correct location for character #1, bit 8,... */
chr = 1; row = 4; col = 0;
do {
	/* repeatedly first check for one of the special corner cases, then... */
	if ((row == nrow) && (col == 0)) corner1(chr++);
	if ((row == nrow-2) && (col == 0) && (ncol%4)) corner2(chr++);
	if ((row == nrow-2) && (col == 0) && (ncol%8 == 4)) corner3(chr++);
	if ((row == nrow+4) && (col == 2) && (!(ncol%8))) corner4(chr++);


	/* sweep upward diagonally, inserting successive characters,... */
	do {

		if ((row < nrow) && (col >= 0) && (!array[row*ncol+col]))
			utah(row,col,chr++);
			row -= 2; col += 2;
			}
		
		while ((row >= 0) && (col < ncol));
			row += 1; col += 3;

		/* & then sweep downward diagonally, inserting successive characters,... */
		do {

			if ((row >= 0) && (col < ncol) && (!array[row*ncol+col]))
			utah(row,col,chr++);
			row += 2; col -= 2;
		} 
		while ((row < nrow) && (col >= 0));
			row += 3; col += 1;
		/* ... until the entire array is scanned */
	} while ((row < nrow) || (col < ncol));
		/* Lastly, if the lower righthand corner is untouched, fill in fixed pattern */
		if (!array[nrow*ncol-1]) {
			array[nrow*ncol-1] = array[nrow*ncol-ncol-2] = 1;
		}
}


/* "main" checks for valid command line entries, then computes & displays array */
void main(int argc, char *argv[])
{
	int x, y, z;

	if (argc <= 3) {
		printf("Command line: ECC200 #_of_Data_Rows #_of_Data_Columns\n");
	}
	else {
		nrow = ncol = 0;
		nrow = atoi(argv[1]); ncol = atoi(argv[2]);
		
		if ((nrow >= 6) && (~nrow&0x01) && (ncol >= 6) && (~ncol&0x01)) {
			
			array = malloc(sizeof(int) * nrow * ncol);
			
			ecc200();
			
			for (x=0; x<nrow; x++) {
				for (y=0; y<ncol; y++) {
				z = array[x*ncol+y];
					if (z == 0) printf(" WHI");
					else if (z == 1) printf("BLK");
					else printf("%3d.%d",z/10,z%10);
				}
				
				printf("\n");
			}

			free(array);
		}
	}
}