您好
我在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);
}
答案 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::string
,std::cin
和std::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];
或其他一些大小值。