Kid*_*234 1 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;
}
Run Code Online (Sandbox Code Playgroud)
然后当我尝试在主要功能中使用它时
int i = 0;
NodePointer* rows = (NodePointer*)malloc(50*sizeof(NodePointer));
for (i = 0; i < 20; i++) {
rows[i] = createNode(i,i+10,i*i);
}
Run Code Online (Sandbox Code Playgroud)
它引发了运行时错误,但是当我像这样更改for循环时(更改在for循环中-仅执行一次):
for (i = 0; i < 1; i++) {
rows[i] = createNode(i,i+10,i*i);
}
Run Code Online (Sandbox Code Playgroud)
它没有引发错误。所以我问我在做什么错;错误:
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.
Run Code Online (Sandbox Code Playgroud)
更改此:
NodePointer p = (NodePointer)malloc(sizeof(NodePointer));
Run Code Online (Sandbox Code Playgroud)
对此:
Node p = malloc(sizeof(Node));
Run Code Online (Sandbox Code Playgroud)
由于您想分配type元素Node
,而不是NodePointer
。
提示:强制转换of malloc()
并没有导致错误,但是您不应该这样做,如我强制转换malloc的结果中所述。
PS:当您为p
和分配相同的类型时,是否感到不可思议rows
?;)
归档时间: |
|
查看次数: |
56 次 |
最近记录: |