Writting a program which involves tallying generated numbers. I'm having problems with the tallying part. It takes a number, and finds it in the second row of an array, and tallies (add 1) to the same position in the first row. Here's my extracted code:

#include <stdio.h>

void tally(int number, int output[][2]);  /* variable length */

int main() {
  int array[4][2];
  array[0][1] = 4;
  array[1][1] = 3;
  array[2][1] = 2;
  array[3][1] = 1;
  tally(2, array);
  tally(2, array);
  tally(1, array);
  tally(4, array);

  printf("%d, %d, %d, %d\n", array[0][0], array[1][0], array[2][0],
  return 0;

void tally(int number, int output[][2]) {
/* This function will find a number on the second row, and tally (add 1) to its equivalent place on the first row. */
  int count = 0;

  while(1) {
    if(output[count][1] == number) {

Yes I know it has no security yet, so don't pass a number which isn't in the array.
The program seems to print out either random memory locations, or random pointers:

-1074781680, -1074781672, -1074781664, -1074781656

Any Idea's? Thanks.:confused:

Your 1st half of the array array[x][0] is never initialized to zero so the values start out with garbage.

Yes, that's the solution :)

When you set a pointer and don't always use every "point" in it(especially while dealing with user input), you need memset() to set a default value.

you need memset() to set a default value.

memset() is not needed. You can do it without calling a function by using an initializer for the array:

int array[4][2] = {0}; /* init all elements to 0 */
This question has already been answered. Start a new discussion instead.