私はデータ構造が配列である単純なスタック操作を書いています。スタック上でのrealloc()の使用
#define DEFAULT_VAL 10 //in a separate Header file
int *stacky = (int*) malloc (default_size * sizeof(int));
目的は、要素が失われないようにしながらスタックのサイズを動的に設定する関数を作成することです。ここで
は、私がこれまで持っているものです。私のmain()
機能で
void Sizer(int size)
{
#undef DEFAULT_VAL
#define DEFAULT_VAL size
maxSize = size;
int *newbuffer = (int*) realloc (stacky, size);
if(newbuffer == NULL) //checking if the 'realloc' was successful :)
{
printf("PROBLEM HERE :)");
}
else
{
stacky = newbuffer;
}
}
:
int main()
{
int i;
for(i=1; i<15; i++)
{
push(i);
}
Sizer(9);
displayStack();
Sizer(17);
displayStack();
}
出力は次のとおりです。
DEFAULT_VAL is now: 9
9. 9
8. 8
7. 7869816
6. 7877384
5. 17278
4. 385207786
3. 3
2. 2
1. 1
DEFAULT_VAL is now: 17
9. 9
8. 8
7. 7869816
6. 7877384
5. 17278
4. 50331651
3. 3
2. 2
1. 1
何かアドバイスは歓迎です! manページから感謝
'#define'は(変数として)使用しようとする方法では使用できません。 – tkausl
'stacky'をどこで定義するのかは100%明確ではありませんが、C言語では変数が関数の外にあるときに表示されるような初期化子を書くことはできません。 –
なお、コード内の 'のボイドサイザー(int型のサイズ) {/ *改行*/ DEFAULT_VAL #undefの/ *改行*/ の#define DEFAULT_VALサイズ/ *改行*/ maxSizeと=サイズ;'、あなたはしないでください実際には 'DEFAULT_VAL'を使用します。 'size'の定義は奇妙です。プリプロセッサはコンパイル時にテキスト置換を行います。コードはうまくいくかもしれませんが、プリプロセッサを使ってやろうとしていることをやっているのは、特にマクロが実際には使われていないためです。 –