提问人:Alex Babushin 提问时间:12/7/2022 最后编辑:Alex Babushin 更新时间:12/7/2022 访问量:32
仅使用指针的链表 question+problem
linked list using only pointers question+problem
问:
我遇到了烦人的问题,我不太明白, 我有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;
}
这是初始化内存池的代码,试图以某种方式将指针连接到链接的指针
基本上我使用指针来构建链接指针
(我的任务是构建一个固定的块内存池分配器,我只能以字节为单位对 block_size * block_amount的总量进行 malloc,并且我不能再对任何管理器使用任何 malloc,我唯一拥有的是一个 int * 类型的全局变量,所以我想构建一个链接指针并将头部返回给用户,然后将其推进到下一个指针)
从理论上讲,p_Memory_blocks应该前进到最后一个值,因为像链表一样,他目前是负责人,但我得到“抛出未处理的异常:读取访问冲突”等 如果使用两次后失败 p_Memory_blocks = *p_Memory_blocks; ,所以有人得到解释吗?还是更好的实现方式?
谢谢!
我试图malloc更多的内存和变量类型
答:
0赞
ikegami
12/7/2022
#1
链表节点有两个字段:next 和 value。你不会只用一个领域走得太远。除非你解决这个问题,否则你注定要失败。
你眼前的问题源于此。
在循环中,有时包含指向下一个节点的指针,有时包含值,您无法区分两者。n1
从技术上讲,最终会成立,此时会导致未定义的行为。n1
100
*n1
您需要先解决结构未包含足够信息的问题,然后才能继续。
评论
0赞
Alex Babushin
12/7/2022
我用更多的代码细节更新了问题,似乎我不清楚
0赞
ikegami
12/7/2022
不,很清楚。你现在发布的内容,otoh,并不能证明问题所在。但这仍然是同样的问题。必须运行
上一个:free() 函数总是崩溃
下一个:如何确定 C 程序中的可用堆内存
评论