不理解如何初始化源/接收类逻辑的指针

Not understanding how to initialize pointers for source/sink class logic

本文关键字:指针 初始化 不理解      更新时间:2023-10-16

将源输出更改为指针后,我开始在调用GetOutput()函数时发生段错误。我很确定我没有正确初始化output。将其初始化为NULL,因为我目前正在做的是行不通的,我相当肯定它也没有意义,考虑到这意味着output永远不会持有任何东西。我想也有可能我只是犯了一个语法错误。所以我很感激任何关于我应该如何初始化我的output的想法。

// source.c
#include <iostream>
#include <source.h>
#include <stdlib.h>
Source::Source()
{
    Image * output = NULL;
    output->SetSource(this);
}
Source::~Source() {}
Image * Source::GetOutput() const
{
    std::cerr << "This function never executes due to segfault." << std::endl;
    output->ResetSize(output->GetWidth(), output->GetHeight());
    return output;
}
void Source::Update()
{
    Execute();
}

// source.h
#include <image.h>
#ifndef SOURCE_H
#define SOURCE_H
class Image;
class Source
{
    public:
        Source();
        virtual ~Source();
        Image * GetOutput(void) const;
        virtual void Execute()=0;
        virtual void Update();
    protected:
        Image* output;
};
#endif

下面的代码首先将指针设置为NULL,然后尝试使用它,因此当然会出现错误。

Image * output = NULL;
output->SetSource(this);
相反,您可以使用new关键字来初始化它,如下所示:
Image *output = new Image;
output->SetSource(this);