your line:
Wire.send(0); //sets memory pointer to 0
doesnt seem to be ok.
it sends a byte, but in order to set the memory address on your i2c eeprom, you need to send a 2 bytes long address, e.g. an int, since int for arduino is 16bit (2-byte) long.
quoting from an i2c eeprom datasheet:
Each data byte in the memory has a 16-bit (two
byte wide) address. The Most Significant Byte (Table
4) is sent first, followed by the Least significant
Byte (Table 5). Bits b15 to b0 form the address of
the byte in memory. Bit b15 is treated as Don't
Care bits on the M24256-A memory.
so, you need to send a 16bit memory address, for example, to write a byte you can:
int memory_address = 0; // this is 16bit long
Wire.beginTransmission(i2c_address);
Wire.send((byte)(memory_address >>

); // first the MSB (8-bits)
Wire.send((byte)memory_address); // then the LSB (8-bits)
Wire.send(data);
Wire.endTransmission();