Cでリンクリストを使用してスタックを実装しようとしていますが、新しいものをプッシュした後、スタック上に置く。私はこれが起こっていることを知っている、なぜなら、プログラムがまだスタックがヌルであると言っているからだ。何らかの理由で、私がプッシュで行う変更は、関数が終了したときには残りません。理由を理解できません。それはの一部だ、助けてくれてありがとう私はプッシュは正確にこれらのパラメータで行わなければならないことを言及するのを忘れてしまった:Cのリストは、初期化されたスタックにデータをプッシュすると変更されません。
typedef struct stack
{
int value;
struct stack * next;
} * stack_T;
stack_T
new_stack()
{
return NULL;
}
int
push_stack(stack_T s, int data)
{
stack_T new = malloc(sizeof(stack_T));
new = s;
if (s == NULL)
{
s = malloc(sizeof(stack_T));
if (s == NULL)
return 1;
}
s->value = data;
s->next = new;
return 0;
}
EDIT:
は、ここに私のスタック構造体、初期化のためのコード、およびプッシュです仕事、宿題。私はそれをする方法を探しているのではなく、むしろ私が間違っていることを探しています。私は参照渡しをエミュレートすることができます知っているが、私が言ったようにそれがなければならない。このスタイルで前
int push_stack(stack_T s, int data)
私が作った構造体とちょうどパラメータとしてそれらを取る機能を有しており、変更はとどまるが、彼らは勝ちましたこの場合、私は理由が分かりません。
を発生しているた行を決定するために
valgrind
を使用できることであるあなたは、一般的にstack_T' 'のようなポインタの型のエイリアスを作成するべきではありません。これは 'malloc(sizeof(stack_T))'が構造体ではなくポインタ***に十分なスペースを割り当てているからです。 –c *で参照による呼び出しをエミュレートすることについても検索して読んでください。 –
また、スタックをmallocして、次の行の唯一の参照を上書きします....何を指しているのかを描き、コードを歩かなければいけません...複数の間違いがあります... – blackghost