什么导致内存访问错误?

时间:2014-05-17 10:56:30

标签: c

我不明白这里导致内存访问错误的原因。

我做了一个简单的例子来说明我的问题:

#include <stdlib.h>

typedef struct mycanvas {
    void *pixels;
} mycanvas;

main()
{
    void* testchunk;  
    testchunk = (void*) calloc (1024 * 768 * 4,sizeof(char));

    struct mycanvas* new_canvas;
    new_canvas->pixels=testchunk; //causes memory access error
}

需要更改哪些才能让它运行?这是Linux上的gcc。

3 个答案:

答案 0 :(得分:3)

您从未初始化new_canvas。最有可能的是,你想这样做:

struct mycanvas new_canvas;
new_canvas.pixels=testchunk;

答案 1 :(得分:0)

#include <stdlib.h>

typedef struct mycanvas {
    void *pixels;
} mycanvas;

int main()
{
    void* testchunk;  
    testchunk = (void*) calloc (1024 * 768 * 4,sizeof(char));

    mycanvas *new_canvas = malloc(sizeof(struct mycanvas));
    new_canvas->pixels=testchunk; //now everything is ok

return 0;
}

答案 2 :(得分:-1)

我想我现在想出来了:

#include <stdlib.h>

typedef struct mycanvas {
    void *pixels;
} mycanvas;

main(){
    void* testchunk;  
    testchunk = (void*) calloc (1024 * 768 * 4,sizeof(char));

    struct mycanvas* new_canvas=(mycanvas*)malloc(sizeof(mycanvas));

    new_canvas->pixels=testchunk; 
}

感谢您的帮助!顺便说一句,因为我使用cpp我可以使用&#34; new&#34;而不是malloc。