C++ 空指针分配错误

C++ 空指针分配错误,c++,turbo-c++,C++,Turbo C++,嗨 我在 Turbo C++编译器中编写了以下代码,并尝试打印后缀和中缀,但是它显示了空指针赋值< /C>。我不明白为什么会这样。请帮帮我 提前谢谢 #include<iostream.h> #include<stdio.h> void main() { char *infix,*postfix; cout<<"Enter postfix exp:"; gets(postfix); cout<<"Enter

嗨 我在 Turbo C++编译器中编写了以下代码,并尝试打印后缀和中缀,但是它显示了空指针赋值< /C>。我不明白为什么会这样。请帮帮我

提前谢谢

#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);
}
#包括
#包括
void main()
{
字符*中缀,*后缀;

您必须用内存初始化中缀和后缀。类似于:

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

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

您必须使用内存初始化中缀和后缀。类似于:

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

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

我同意这些评论。但是为了直接回答这个问题,中缀和后缀变量以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);
char*中缀,*后缀;
中缀=新字符[50];
后缀=新字符[50];

cout我同意这些评论。但是为了直接回答这个问题,中缀和后缀变量开始时为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);
char*中缀,*后缀;
中缀=新字符[50];
后缀=新字符[50];
库特
这些指针尚未分配内存

将它们声明为数组,这样您就不需要分配内存(一旦分配完毕,就取消分配):

或者更好地使用
std::string
std::cin
std::cout

这些指针尚未分配内存

将它们声明为数组,这样您就不需要分配内存(一旦分配完毕,就取消分配):


或者更好的方法是,使用
std::string
std::cin
std::cout
等等。

尝试以下方法:

char *infix,*postfix;
infix = new char[20];
postfix = new char[20];
 char infix[255],postfix[255]
或者做你所能做的,但首先为指针分配一些内存:

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

我会毫不犹豫地说,这是因为您正在分配给没有内存分配给它们的指针

尝试以下方法:

char *infix,*postfix;
infix = new char[20];
postfix = new char[20];
 char infix[255],postfix[255]
或者做你所能做的,但首先为指针分配一些内存:

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

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

您尚未为*中缀和*后缀分配任何内存。您所做的只是创建指向内存位置的指针。程序不知道要分配多少内存。您必须给它们一个默认大小:
字符*中缀=新字符[256];
或其他一些大小值。

获取更新的编译器。g++或VC++都可以

指针是一个相对困难的主题。在您正确理解它们的工作原理之前,我建议您使用C++的
iostream
工具以及字符串,而不是字符数组和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
}
#include//no.h表示标准include
#include//std::string
使用名称空间std;//避免在所有内容前面键入std::
int main()//main从不为空
{
字符串后缀,中缀;
cout postfix;//读入postfix
cout中缀;//读入中缀

找一个更新的编译器。g++或VC++都可以

指针是一个相对困难的主题。在您正确理解它们的工作原理之前,我建议您使用C++的
iostream
工具以及字符串,而不是字符数组和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
}
#include//no.h表示标准include
#include//std::string
使用名称空间std;//避免在所有内容前面键入std::
int main()//main从不为空
{
字符串后缀,中缀;
cout postfix;//读入postfix
cout中缀;//读入中缀

一些建议:(1)你应该得到一个新的编译器;VisualC++和G++都是免费提供的。(2)确保你有。(3)永远不要使用
gets
。永远不要。它不能安全使用;任何使用
gets
的程序都有安全漏洞。这不是交互式导师网站。你应该自己做作业。gets
4.38 gets的手册页--获取字符串(过时,改用fgets)
@Martin也是C标准的最新版本,ISO 9899:TC3 7.26.9/2“gets函数已过时,不推荐使用”所以,问题是:为什么我会得到错误NULL指针分配。你收到它是因为char*infix,*postfix是指针,它们是未定义的。你没有定义它们。所以它们可能指向内存的随机部分。编译器可以通知你,这很好,否则你可能会破坏内存的某些重要部分。这就像定义变量输出是不确定的,你会收到胡言乱语。一些建议:(1)你应该得到一个新的编译器;VisualC++和G++都是免费提供的。(2)确保你有。(3)永远不要使用
gets
。永远不要。它不能安全使用;任何使用
gets
的程序都有安全漏洞。这不是交互式导师网站。你应该自己做作业。gets
4.38 gets的手册页--获取字符串(过时,改用fgets)
@Martin也是C标准的最新版本,ISO 9899:TC3 7.26.9/2“gets函数已过时,并且已弃用”,因此,问题是:为什么我会得到错误NULL指针分配。您收到它是因为char*infix、*postfix是