我在做什么错-C指针

时间:2019-03-09 16:57:04

标签: c pointers memory-management runtime-error dynamic-memory-allocation

我已经定义了struct Node和createNode函数。

typedef struct {
    int r, c;
    int val;
    struct Node* down, *right;
} Node;

typedef Node* NodePointer;    

NodePointer createNode(int r,int c,int val) {
        NodePointer p = (NodePointer)malloc(sizeof(NodePointer));
        if (p != NULL) {
            p->r = r;
            p->c = c;
            p->val = val;
            p->down = p->right = NULL;
        }
        return p;
}

然后当我尝试在主要功能中使用它

int i = 0;
NodePointer* rows = (NodePointer*)malloc(50*sizeof(NodePointer));
for (i = 0; i < 20; i++) {        
    rows[i] = createNode(i,i+10,i*i);
}

它引发了运行时错误,但是当我这样更改for循环时(更改在for循环中-仅执行一次):

for (i = 0; i < 1; i++) {        
    rows[i] = createNode(i,i+10,i*i);
}

它没有引发错误。所以我问我在做什么错; 错误:

Zad1: malloc.c:2374: sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1)) & ~((2 *(sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long) old_end & pagemask) == 0)' failed.

1 个答案:

答案 0 :(得分:6)

更改此:

NodePointer p = (NodePointer)malloc(sizeof(NodePointer));

对此:

Node p = malloc(sizeof(Node));

因为您要分配类型为Node而不是NodePointer的元素。

提示:如Do I cast the result of malloc?所述,强制转换malloc()的返回并不会导致错误,但是您不应这样做。

PS:为prows分配相同的类型时,是否感到不可思议? ;)

相关问题