尝试将指针与结构一起使用时出错

Posted

技术标签:

【中文标题】尝试将指针与结构一起使用时出错【英文标题】:Getting error when trying to use pointer with struct 【发布时间】:2018-10-18 16:26:48 【问题描述】:

我正在尝试将 RGB 值编码到一个结构中,它工作正常,但是当我尝试运行一个访问该结构的函数时,我收到一个异常,说我的结构是 nullptr。代码如下:

struct Color 
    unsigned char R;
    unsigned char G;
    unsigned char B;
*blue, *red, *green, *yellow, *purple, *pink, *brown;

void CreateColors()

    blue->R = 0;
    blue->G = 0;
    blue->B = 255;

    red->R = 255;
    red->G = 0;
    red->B = 0;

    green->R = 0;
    green->G = 255;
    green->B = 0;

    yellow->R = 255;
    yellow->G = 255;
    yellow->B = 0;

    purple->R = 133;
    purple->G = 87;
    purple->B = 168;

    pink->R = 255;
    pink->G = 0;
    pink->B = 191;

    brown->R = 168;
    brown->G = 130;
    brown->B = 87;


如果你们能告诉我我做错了什么或使用更好的数据结构,那就太好了。我正在 TA'ing 一个 cpp 类,并试图巧妙地开始使用指针来预热它们。再次感谢。

当我尝试像这样使用这些值时:

if (deg >= 0 && deg < boundaries[COAL_B])

    pixels[i][j][0] = blue->R;
    pixels[i][j][1] = blue->G;
    pixels[i][j][2] = blue->B;

它会抛出同样的错误。

【问题讨论】:

您没有为结构分配任何空间。 "我正在为一个 cpp 类做 TA,并试图巧妙地开始使用指针来预热它们" - 这看起来是一种糟糕的方式,而且您似乎没有教授 C++(或 C)所需的最少知识。 不要粗鲁,但如果你要参加 C++ 课程的 TA,你真的应该了解 C++。 对不起,我认为当您声明某种数据类型的指针时,它会分配足够的内存来存储该指针。你是说我应该使用新的并手动分配内存吗? @EugeneSh。 我们的意思是,在尝试教授 C++(或 C)之前,您可能需要阅读一本有关 C++(或 C)的书。 【参考方案1】:

您正在创建一系列指向struct Color 的指针,但您没有初始化它们中的任何一个,因此因为它们是在文件范围内定义的,所以它们都设置为NULL。然后,您尝试取消引用这些 NULL 指针。这会调用undefined behavior。

您应该改为定义这些结构的实例而不是指针:

struct Color 
    unsigned char R;
    unsigned char G;
    unsigned char B;
 blue, red, green, yellow, purple, pink, brown;

然后将它们作为实例访问:

void CreateColors()

    blue.R = 0;
    blue.G = 0;
    blue.B = 255;

    red.R = 255;
    red.G = 0;
    red.B = 0;

    ...

更好的是,去掉初始化函数并在它们被定义的地方初始化它们:

struct Color 
    unsigned char R;
    unsigned char G;
    unsigned char B;
;

struct Color blue =  0, 0, 255, red =  255, 0, 0 , green =  0, 255, 0, ...

【讨论】:

“你应该定义这些结构体的实例 i”——真的不认为他应该声明这些结构体的全局实例。 不,这个结构的全局实例正是我在这种情况下所需要的。感谢您回答我的问题。 另外,当使用结构体时,初始化它们时的默认行为是按照它们在结构体中的顺序填充变量吗?我有点跳到课堂上,所以我真的不知道结构行为的细节。 @MaxAttax 是的,字段按照定义的顺序进行初始化。另外,如果您觉得有用,请随时 accept this answer。【参考方案2】:

您声明了一个指向结构的指针,但从不为其分配内存。当您访问它的成员时,您正在取消引用一个空指针。

【讨论】:

以上是关于尝试将指针与结构一起使用时出错的主要内容,如果未能解决你的问题,请参考以下文章

尝试将 tensorboard 与 google colab 一起使用时出错

尝试将 IQKeyboardManager 与 Xcode 和 Swift 一起使用时出错

尝试将 Magical Record 与 Kiwi 一起使用时构建测试时出错

将 Tensorflow 与 GPU 一起使用时出错

将 Request-Promise 与 Falcor 一起使用时出错

将 ggplot 与 r-shiny 一起使用时出错