我面临一个我不太明白的恼人问题,我有int *类型的指针示例代码:
int* p_Memory_blocks;
int MemoryInit(int num_of_blocks, int block_size) {
int* head;
head = NULL;
for (int i = 0; i < num_of_blocks; i++) {
if ((head = malloc(block_size)) == NULL) {
printf("allocating memory failed");
for (int j = 0; j < i; j++) {
p_Memory_blocks = head;
head = *head;
free(p_Memory_blocks);
}
return 1;
}
head = &p_Memory_blocks;
p_Memory_blocks = head;
}
return 0;
}
int* MyMalloc() {
int* return_block = p_Memory_blocks;
p_Memory_blocks = *p_Memory_blocks;
return return_block;
}
void MyFree(int* block) {
*block = p_Memory_blocks;
p_Memory_blocks = block;
}
这是初始化内存池的代码试图以某种方式将指针连接到链接指针
基本上我使用指针来构建链接指针
(我的任务是建立一个固定块内存池分配器,我只能malloc block_size * block_amount的总量在字节,我不能使用任何管理器的malloc,我唯一拥有的是int *类型的全局变量,所以我想建立一个链接的指针,并返回头部给用户,然后推进到下一个指针)
理论上p_Memory_blocks应该前进到最后一个值,因为像链表一样,他目前是头,但我得到'未处理异常抛出:读访问冲突。诸如此类使用两次后失效p_Memory_blocks = *p_Memory_blocks;有人能解释一下吗?或者更好的实现方式?
非常感谢!
我尝试malloc更多的内存和变量类型
链表节点有两个字段:next和value。光靠一个领域是走不了多远的。如果你不解决这个问题,你注定要失败。
你当前的问题就源于此。
在循环中,n1
有时包含指向下一个节点的指针,有时包含一个值,您无法将两者区分开来。
用专业术语来说,n1
将最终容纳100
,此时*n1
将导致未定义的行为。
在继续之前,您需要解决结构中没有包含足够信息的问题。