指针未指向NULL时的访问冲突

时间:2014-02-17 10:38:23

标签: c++ pointers error-handling runtime access-violation

这个小代码面临朗姆酒时间错误,说“访问违规”。 我在网上看到它说当指针指向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;
}

2 个答案:

答案 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;
}