【发布时间】:2010-04-01 02:37:45
【问题描述】:
我正在编写一个内存分配器,我需要一种将整数存储在一块内存中的方法。这个整数将表示块的大小,因此我可以在给出指向开头的指针的情况下导航到末尾。
这是我的测试示例:
// 编辑:为 testInt 声明空间 int* testInt = new int;
head_ptr = (char*) malloc(4*1024*1024); // Allocate 4MB
// EDIT: Should have used std::fill and std::copy
memset(head_ptr,23,sizeof(int)); // Set Address head_ptr = 12345
memcpy(testInt,head_ptr,sizeof(int)); // Set testInt = head_ptr
printf("testInt = %i",testInt);
这会在倒数第二行引发分段错误。
我正在尝试做的事情有意义吗?
如果是这样,正确的做法是什么?
非常感谢大家的帮助!!问题解决了:-)
【问题讨论】:
-
testInt 是在哪里定义的?这似乎是这里的错误,与 head_ptr 无关。
-
因为 testInt 确实指向任何可靠的地方,所以 memcpy() 不起作用。你需要打印 *testInt - 你需要初始化它:
int i; int *testInt = &i;. -
12345是值还是指向值的指针??
-
@Jonathin 你说得很好,但我仍然收到 Seg 错误
-
@jpyllman 这是价值,我现在已经降低了它不会溢出
标签: c++ segmentation-fault memcpy memset