0

我试图在我的 malloc 包装函数中分配一个大小为 sz 的结构,然后在该内存区域之后自动添加一个页脚以跟踪超出边界的潜在写入。

在 malloc 包装函数中:

malloc_result = (char *) malloc(sz+sizeof(FOOTERSTR));
...
struct metadata_record * metarec = get_metadata_record_new(sz);
...
create_footer(metarec,footer,key_address);

void create_footer(struct metadata_record *rec, char *footer, char *key_address) {
    //Add Footer

    printf("footer = %s\n",footer);
    printf("key_address = %p\n",key_address);

    char *new_footer_ptr = key_address+sizeof(key_address);
    printf("new_footer_ptr = %p\n",new_footer_ptr);

    strncpy(new_footer_ptr,footer,sizeof(footer));
    new_footer_ptr[sizeof(footer)-1] = '\0';
    printf("new_footer_ptr = %s\n",new_footer_ptr);
}

当我运行它时,我得到:

footer = zftsfviz
key_address = 0x964ef10
new_footer_ptr = 0x964ef14
new_footer_ptr = zft

我希望在将 new_footer_ptr 作为字符串打印时获得完整的页脚文本,但我只得到页脚的第一部分。

4

1 回答 1

1

我不确定“key_address”是什么,但您应该知道 sizeof(key_address) 和 sizeof(footer) 都是 sizeof(char*) 的同义词,这可能不是您想要的。您可能想要 strlen(key_address) 和 strlen(footer) 。如果您确实需要知道分配的大小,则需要将其存储在某处并将其传递给此函数。

于 2012-09-30T20:37:32.380 回答