【错误案例1】 错误原因,函数createCharLink中定义的指针p虽然是在堆上申请的内存空间,但是函数createCharLink没有返回值,所以main函数中的指针p未定义,因此编译未通过。解决办法是,把指针p的声明放在main函数体外,紧跟结构体charlink的定义之后,并且仅仅在createCharLink函数中定义它。或者,把createCharLink更改为返回值为CharLink *类型的函数。
#include<iostream>
#include<cstddef>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
typedef struct charlink
{
char ch;
struct charlink *next;
}CharLink;
//CharLink *p; //在此处,取消注释这一句
void createCharLink(const char *str1)
{
CharLink *p = (CharLink*)malloc(sizeof(CharLink)); //删除或者注释掉这一句
// p = (CharLink*)malloc(sizeof(CharLink)); //修改办法,取消注释这一句
p->next=0;
while(*str1)
{
CharLink *t = (CharLink*)malloc(sizeof(CharLink));
t->ch = *str1;
t->next = NULL;
t->next = p->next;
p->next = t;
++