pragma solidity ^0.4.21;
contract Companys{
struct Product{
bytes32 name;
uint16 price;
}
mapping(address => Product[]) products;
function addProduct(bytes32 _name, uint16 _price){
products[msg.sender].push(Product({name: _name, price: _price}));
}
function getProducts() returns(bytes32[], uint16[]){
uint productSize = products[msg.sender].length;
bytes32[] productsName;
uint16[] productPrices;
for(uint i = 0; i < productSize; i++){
productsName.push(products[msg.sender][i].name);
productPrices.push(products[msg.sender][i].price);
}
return (productsName, productPrices);
}
}
after add one product, when i trey to get products it give me two productsName and productPrices .. :O. Can any one please explain me why?
productsName and productPrices are invalid storage references. You have to create memory arrays (and create it with the proper size in the first place, memory arrays do not have .push()).