以下代码可以编译并完美运行:
typedef struct n {
char value;
struct n* next;
} node;
void insert_new_node(node** head, char new_value)
{
node* new_node = malloc(sizeof(node*));
new_node->value = new_value;
new_node->next = NULL;
if(*head == NULL)
{
*head = new_node;
}
else
{
node* current = *head;
while(current->next != NULL)
{
current = current->next;
}
current->next = new_node;
}
}
我的问题是-请注意,我实际上只是将用于指针的空间分配给了结构,而不是为结构本身分配了空间(参考:node* new_node = malloc(sizeof(node*));
)。所以我的问题是,该结构数据实际存储在哪里?如果存储在堆中,它将如何工作?
答案 0 :(得分:5)
所以我的问题是,此结构数据实际存储在哪里,如果存储在堆中,它将如何工作?
它似乎可以正常工作,访问无效的内存是undefined behavior (UB)。不要那样做。
要详细说明,正如您提到的那样,您仅按指针的大小分配了内存,但是,您正在使用该指针访问超出该边界的内存。在分配的块之外的内存位置未分配给您的程序,因此该内存在您的程序上下文中无效,并且尝试访问该内存是UB。
根据具体情况,可能会导致
任何或全部,无特定顺序。