这个小代码面临朗姆酒时间错误,说“访问违规”。 我在网上看到它说当指针指向NULL时,它的值不能改变。 但这并没有解决问题。
#include<iostream>
using namespace std;
int max=3;
struct node
{
char *ptr;
}*start, *current = start;
void init()
{
current->ptr = (char*)malloc(max*sizeof(char)); //ERROR IN THIS LINE.
}
void add(char page)
{
char *c;
c = current->ptr;
if (page == *c)
cout << "Yes";
else
cout << "No";
}
void main()
{
init();
add('a');
cin >> max;
}
答案 0 :(得分:2)
此
struct node
{
char *ptr;
}*start, *current = start;
不创建节点结构,只创建指针。所以“当前”没有初始化。 改为
struct node
{
char *ptr;
}start, *current = &start;
或在main()或init()中添加正确的内存分配
current = (node*)malloc(sizeof(node));
答案 1 :(得分:0)
发生代码转储是因为您正在访问未初始化的指针。 在尝试取消引用它之前,应将“current”初始化为有效的内存位置。 更清洁的代码将是
#include<iostream>
using namespace std;
int max=3;
struct node
{
char *ptr;
};
struct node* start = new node();
struct node* current = start;
void init()
{
current->ptr = (char*)malloc(max*sizeof(char)); //ERROR IN THIS LINE.
}
void add(char page)
{
char *c;
c = current->ptr;
if (page == *c)
cout << "Yes";
else
cout << "No";
}
void main()
{
init();
add('a');
cin >> max;
}