如果正確理解我自己的代碼,我將為指向資料型別的 3 個指標分配空間ListNode,然后回圈 3 次并向每個節點添加一個數字。我知道節點沒有相互連接
現在,當我嘗試從分配的空間訪問任何節點時,我在代碼底部收到錯誤注釋
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
int main(void)
{
int nums[] = {2,3,4};
ListNode * ptr = (ListNode*)malloc(3*sizeof(ListNode*));
for (int i=0; i < sizeof(nums)/sizeof(nums[0]); i )
{
ListNode new;
new.val = nums[i];
ptr[i] = new;
}
printf("%d \n",ptr[0].val);
free(ptr);
return 0;
}
/*
Error:
malloc(): corrupted top size
Aborted (core dumped)
*/
為什么會出現此錯誤以及如何正確訪問分配空間中的每個節點
uj5u.com熱心網友回復:
您沒有分配足夠的空間:
ListNode * ptr = (ListNode*)malloc(3*sizeof(ListNode*));
在這里,您嘗試動態分配ListNode結構陣列的 3 個元素,但您正在為 3個指向ListNode. 這些指標比結構更小,因此您最終會寫入超過分配記憶體的末尾,從而觸發未定義的行為和崩潰。
您想為 3 個結構分配空間,而不是 3 個指標:
ListNode * ptr = (ListNode*)malloc(3*sizeof(ListNode));
或者更好:
ListNode * ptr = (ListNode*)malloc(3 * sizeof *ptr);
因為這不取決于型別ptr是什么。
uj5u.com熱心網友回復:
int nums[] = {2,3,4};
size_t k = sizeof(nums)/sizeof(nums[0]);
ListNode * ptr = malloc(k*sizeof(ListNode));
不要因為你可以在很多地方找到的原因而轉換 malloc 的結果,包括在 SO 上。
分配
COUNT時間sizeof(object),而不是sizeof(object*)位元組。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427888.html
標籤:C
上一篇:檢查單詞中是否出現字母
