我正在尝试为链表实现推送功能,但以下程序导致了分段错误。我想知道几件事:结构属性的默认值是什么?我似乎必须手动将head->next
的值设置为NULL
。那么head->next
的默认值是什么?
我相信程序中断的原因是因为在推送功能中head->next != NULL
所以它会执行第head = head->next
行,这让我想知道head->next
的价值是什么它不是NULL
,为什么会导致分段错误?
typedef struct Node {
struct Node *next;
int data;
} Node;
void push(Node *head, int data);
int main()
{
struct Node *head = malloc(sizeof(Node));
head->data = 1;
// Works when I uncomment this line
// head->next = NULL;
push(head, 2);
return 0;
}
/* Insert */
void push(Node *head, int data) {
while (head != NULL) {
if (head->next == NULL) {
Node *n = malloc(sizeof(Node));
n->data = data;
head->next = n;
break;
}
head = head->next;
}
}
答案 0 :(得分:6)
什么是结构属性的默认值?
C标准将struct
字段称为成员,而非属性。
C中struct
的成员在三种情况下定义了值:
struct
时,或在所有其他情况下,struct
成员必须在首次使用前指定;在分配之前阅读它们是未定义的行为。
在您的情况下,struct
会在malloc
的动态内存中分配calloc
。这意味着必须明确指定其成员。
如果您从malloc
切换到struct
,则Node *n = calloc(1, sizeof(Node));
的内存将被清零:
public String removePasswordFromJsonString(String jsonString){
// Handle null input
if (jsonString == null) {
return null;
}
// Replace all password values with empty strings
return jsonString.replaceAll(
"(\\n?\\s*\"password\"\\s?:\\s?\")[^\\n\"]*(\",?\\n?)", "$1$2");
}