0

こんにちは、次のコードを書き込んで、Turbo c++ compilerpostfix と infix を印刷しようとしましたが、表示されていNULL pointer assignmentます。なぜそれが起こっているのかわかりません。私を助けてください....

前もって感謝します。

#include<iostream.h>
#include<stdio.h>

void main()
{
     char *infix,*postfix;
     cout<<"Enter postfix exp:";
     gets(postfix);
     cout<<"Enter infix exp: ";
     gets(infix);
     cout<<endl<<endl;
     puts(postfix);
     puts(infix);
}
4

6 に答える 6

7

最新のコンパイラを入手してください。g++ か VC++ のどちらでも問題ありません。

ポインターは比較的難しいテーマです。それらがどのように機能するかを正しく理解するまではiostream、char 配列や C のstdio.

#include<iostream> // no .h for standard includes
#include <string> // std::string    

using namespace std; // to avoid typing std:: in front of everything

int main() // main was never void
{
     string postfix, infix;
     cout<<"Enter postfix exp:";
     cin >> postfix; // read into postfix
     cout<<"Enter infix exp: ";
     cin >> infix; // read into infix
     cout << endl << endl;
     cout << postfix << endl; // write postfix followed by a line feed
     cout << infix << endl; // write infix followed by a line feed
}

それがどのように簡単かを参照してください?これで、メモリの処理方法について心配する必要がなくなりました。

于 2011-04-20T17:57:37.437 に答える
2
char *infix,*postfix;

これらは、メモリが割り当てられていないポインタです。

メモリを割り当てる必要がないように、それらを配列として宣言します(そして、一度割り当てを解除します):

char infix[1024]; 
char postfix[1024];

または、さらに良いことに、などを使用std::stringstd::cinますstd::cout

于 2011-04-20T17:51:53.767 に答える
-1

infix と postfix をメモリで初期化する必要があります。何かのようなもの:

char *infix,*postfix;
infix = new char[20];
postfix = new char[20];

初期化するサイズは、要件によって異なります。乱数を 20 として選んだところです。

于 2011-04-20T17:49:50.863 に答える
-1

コメントに同意します。しかし、質問に直接答えるために、中置変数と後置変数は NULL として開始されます。それらをスタックまたはヒープに割り当てることができます。これがヒープ割り当てです。バッファが不要になった時点で、delete[] を呼び出す必要があります。

 char *infix,*postfix;
 infix = new char[50];
 postfix = new char[50];

 cout<<"Enter postfix exp:";
 gets(postfix);
 cout<<"Enter infix exp: ";
 gets(infix);
  cout<<endl<<endl;
 puts(postfix);
 puts(infix);
于 2011-04-20T17:51:08.273 に答える
-1

頭のてっぺんから、メモリが割り当てられていないポインターに割り当てているためだと思います。

次のようなものを試してください:

 char infix[255],postfix[255]

または、あなたが持っていることを行いますが、最初にポインタにメモリを割り当てます:

 char* infix = new char[255];
 char* postfix = new char[255];
 free infix;
 free postfix;
于 2011-04-20T17:52:03.043 に答える
-1

*infix と *postfix にメモリを割り当てていません。行ったことは、メモリ位置へのポインタを作成することだけです。プログラムには、割り当てるメモリの量がわかりません。デフォルトの size:char *infix = new char[256];またはその他のサイズ値を指定する必要があります。

于 2011-04-20T17:52:32.380 に答える