我想在我的. 大批
typedef struct teleporter {
int start;
int end;
}teleporters;
int main(int argc, char **argv) {
int lenght = 2;
teleporters *teleportPlaces;
teleporters mytele;
mytele.start = 0;
mytele.end = 0;
teleportPlaces = calloc(2, sizeof(teleporters));//malloc (sizeof(teleporters) * (lenght));
if (teleportPlaces != NULL) {
teleportPlaces = NULL;
}
for (int i = 0; i < lenght; i ) {
teleportPlaces[i] = mytele;
}
printf("Teleport END[0] = %d",teleportPlaces[0].end);
free(teleportPlaces);
return 0;
}
但是每次我添加它時,它都會給我一個分段錯誤,
我該如何解決這個錯誤?如果有文章或答案就太好了,謝謝
uj5u.com熱心網友回復:
問題在于,您實際上是在分配地址后立即將其丟棄到您的傳送地點。
洗掉將 teleportPlaces 指向 NULL 的 if 陳述句。
在 for 回圈中,地址 teleportPlaces[i] 應該是陣列開頭的地址 (teleportPlaces) 和偏移量 (i)。但是,當您將其重新分配為指向 NULL 時,陣列的實際地址將丟失,從而導致記憶體泄漏(因為如果您不知道 calloc 的地址,則無法釋放它)。
uj5u.com熱心網友回復:
這個 if 陳述句
if (teleportPlaces != NULL) {
teleportPlaces = NULL;
}
沒有意義。這意味著如果記憶體分配成功,您將指向teleportPlaces已分配記憶體的指標設定為NULL,從而產生記憶體泄漏。
之后,您將在以下 for 回圈中使用此空指標。
洗掉此 if 陳述句或例如寫入
if (teleportPlaces == NULL) return 0;
或者
if (teleportPlaces != NULL) {
for (int i = 0; i < lenght; i ) {
teleportPlaces[i] = mytele;
}
printf("Teleport END[0] = %d\n",teleportPlaces[0].end);
}
free( teleportPlaces );
你也可以簡化這個代碼片段
teleporters mytele;
mytele.start = 0;
mytele.end = 0;
以下方式
teleporters mytele = { .start = 0, .end = 0 };
也不要使用像2. 而不是這個宣告
teleportPlaces = calloc(2, sizeof(teleporters));
你應該寫
teleportPlaces = calloc( length, sizeof(teleporters));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/359195.html
下一篇:為什么在陣列中添加空字符?
