NULL指针赋值错误

时间:2011-04-20 17:45:55

标签: c++ turbo-c++

您好 我在Turbo c++ compiler中编写了以下代码,并尝试打印postfix&中缀,但它显示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);
}

6 个答案:

答案 0 :(得分:7)

获取更新的编译器。无论是g ++还是VC ++都可以。

指针是一个相对棘手的主题。在你正确理解它们是如何工作之前,我建议你使用C ++的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
}

看看它更容易?现在您不必担心如何处理内存。

答案 1 :(得分:2)

char *infix,*postfix;

这些指针尚未分配内存。

将它们声明为数组,这样就不需要分配内存(并在完成后解除分配):

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

或者更好的是,使用std::stringstd::cinstd::cout等。

答案 2 :(得分:-1)

你必须用内存初始化中缀和后缀。类似的东西:

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

您初始化的大小取决于您的要求。我刚刚选了一个随机数为20。

答案 3 :(得分:-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);

答案 4 :(得分:-1)

就在我的脑海中,我会说它,因为你正在分配没有分配给它们的内存的指针。

尝试使用类似的东西:

 char infix[255],postfix[255]

或做你所拥有的,但首先为指针分配一些内存:

 char* infix = new char[255];
 char* postfix = new char[255];
 free infix;
 free postfix;

答案 5 :(得分:-1)

您尚未为* infix和* postfix分配任何内存。您所做的就是创建指向内存位置的指针。程序不知道要分配多少内存。您必须为它们提供默认大小:char *infix = new char[256];或其他一些大小值。