【发布时间】:2015-02-25 04:00:59
【问题描述】:
我有以下结构:
struct block {
void *addr; /*start address of memory for this block */
int size;
struct block *next;
};
我有以下代码来初始化每个块:
void block_init(struct block *b, void *addr, int size){
/*Allocate space and fill b with the initial data.*/
b = (struct block *)malloc(sizeof(struct block));
if(b){
b->addr = addr;
b->size = size;
b->next = NULL;
}
}
我正在从另一个函数调用以下行:
struct block *list;
block_init(freelist, mem, size);
但是,它从不初始化块。
我使用 gdb 来测试这个,但是每次我得到一个 NULL 指针:
123 b = (struct block *)malloc(sizeof(struct block);
(gdb) next
124 if(b){
(gdb) print b
$2 = (struct block *) 0x0
(gdb) print b->size
Cannot access memory at address 0x8
我不知道发生了什么,有人可以帮帮我吗?
【问题讨论】:
-
您不需要在 C 程序中强制转换
malloc的返回值。 -
我有一种预感,你忘了在你的 .c 文件中
#include <stdlib.h>。 -
你只修改了局部变量
b。你要么需要你的参数b是一个指向用&list调用的指针的指针(这样它就可以改变内容)或者(可能更容易)返回 malloced 块。 -
另外,你需要阅读:c-faq.com/ptrs/passptrinit.html
-
@John3136:短语“双指针”是模棱两可的。您的意思是指向指针的指针,而不是
double*。
标签: c linux memory malloc heap-memory