0

早上好,我目前正在为 Pebble Smartwatch 开发一个应用程序,它使用标准 C,这是我刚开始使用的一种语言。

我有一个函数可以将 Money Transaction 添加到数组中。我已经像这样定义了事务:

struct Transaction {
    char * title;
    char * amount;
    char * date;
    char * text;
} txnsArray[20];

每当我收到一笔交易时,它就会使用这个函数添加到 txnsArray 中:

void addTransaction(DictionaryIterator * txnIter){
    Tuple *txnTitle_Tuple = dict_find(txnIter, TRANSACTION_TITLE);
    Tuple *txnAmount_Tuple = dict_find(txnIter, TRANSACTION_AMOUNT);
    Tuple *txnText_Tuple = dict_find(txnIter, TRANSACTION_TEXT);


    txnsArray[transOverview.txnCounter].title = txnTitle_Tuple->value->cstring;
    txnsArray[transOverview.txnCounter].amount = txnAmount_Tuple ->value->cstring;
    txnsArray[transOverview.txnCounter].text = txnText_Tuple->value->cstring;

    transOverview.txnCounter++;

}

现在,当我检查这个数组时,它确实添加了应有的条目,但是我添加的最后一个事务适用于所有条目。

假设我首先添加一笔金额为 2.5 欧元的交易,然后再添加一笔金额为 4.0 欧元的交易,那么两个条目将有 4.0 欧元。

我究竟做错了什么?非常感谢您的帮助。:)

4

1 回答 1

4

看起来该dict_find函数没有value->cstring为每个调用分配内存,而是使用相同的缓冲区。因此,数组中的结构最终带有指向同一内存的指针,如果dict_find修改它,它会修改所有数组条目。

于 2014-03-12T10:18:19.057 回答