我被困,也许是一个非常简单的问题。
在大学里,我们必须在C中创建自己的malloc函数。在解除引用的指针上保存指针Address时,我只会遇到问题。我在堆上工作,剩下足够的内存。
void *actual_pointer = sbrk(sizeof(Node));
*(char*)actual_pointer = 'O';
actual_pointer = actual_pointer+sizeof(char);
*(char*)actual_pointer = 'K';
actual_pointer = actual_pointer+sizeof(unsigned int);
*(unsigned int*)actual_pointer = size;
actual_pointer = actual_pointer+sizeof(unsigned int);
*(unsigned int*)actual_pointer = 0;
actual_pointer = actual_pointer+sizeof(unsigned int);
*actual_pointer = actual_pointer;
最后一行不起作用。我尝试了一切。是不是可以将一些指针地址存储到解除引用的指针?
typedef struct _Node_
{
char checkCorruption_[2];
unsigned int size_;
unsigned int status_;
char *location_;
struct Node *next_;
struct Node *prev_;
} Node;
这是我的双链表的结构,代表了结构。
我的想法如下:
我们需要制作一个简单的malloc函数。从main函数调用例如data[1] = malloc(100 * sizeof(int))
。然后我将在mallocfunction中创建一个Node并在其中存储“checkCorruption”-Value'OK'。在它的大小之后,在我的例子中“100 * sizeof(int)”。在此之后,我将一个0用于使用或一个免费存储在其中。然后我将存储返回到data [0]的位置 - 存储与sbrk(100*sizeof(int))
一起保留并从该位置开始。然后我将指针存储到下一个节点和前一节点。
我总是检查OK值,如果其他某个malloc有溢出并将其覆盖 - 那么我将退出并出错。
我的想法完全废话还是没事?
EDIT2:
当我现在使用Node而不是void时,我也可以存储我的位置指针到节点。
Node *actual_pointer = sbrk(sizeof(Node));
actual_pointer->checkCorruption_[1] = 'O';
printf("actual_pointer: %p\n", actual_pointer);
printf("actual_O: %c\n", actual_pointer->checkCorruption_[1]);
printf("actual_pointer_before: %p\n", actual_pointer);
actual_pointer = actual_pointer+sizeof(char);
printf("actual_pointer_after: %p\n", actual_pointer);
输出:
actual_pointer: 0x1ad4000
actual_O: O
actual_pointer_before: 0x1ad4000
actual_pointer_after: 0x1ad4028
但现在我遇到actual_pointer = actual_pointer+sizeof(char);
的一些问题。这个命令应该将char的大小添加到actual_pointer
但是它会增加40个字节的指针?我不明白这个?
先谢谢,
菲利普
答案 0 :(得分:1)
无法将价值存入虚空......
尝试用
替换最后一行*(unsigned int*)actual_pointer = (unsigned int*)actual_pointer