簡體   English   中英

為什么這段代碼給我一個分段錯誤?

[英]Why this code giving me a segmentation fault?

#include <stdio.h>
int main()
{
    int i,a;
    int* p;
    p=&a;
    for(i=0;i<=10;i++)
    {
        *(p+i)=i;
        printf("%d\n",*(p+i));
    }
    return 0;
}

我嘗試在不使用數組的情況下在序列 memory 位置分配從 0 到 10 的數字。

a只是一個 integer。不是數組。

你需要以不同的方式聲明它:

 int i, a[10];

您正在嘗試寫入它沒有訪問權限的 memory。 變量a是main function中的局部變量,存放在棧中。 指針 p 被初始化為指向 a 的地址。 然后代碼嘗試寫入從 p 開始到 p+10 的 memory 地址。 但是,這些 memory 地址不是已分配給程序使用的 memory 的一部分,因此程序在嘗試寫入它們時會收到分段錯誤。

要解決此問題,您可以將循環條件更改為較小的值,或者可以使用 malloc 或 calloc 動態分配 memory 並將指針分配給返回的地址。 這將允許您寫入分配的 memory 而不會導致分段錯誤。

像這樣:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int i;
int* p = malloc(sizeof(int) * 11);  // Allocate memory for 10 integers
if (p == NULL) {  // Check for allocation failure
    printf("Error allocating memory\n");
    return 1;
}
for(i=0;i<=10;i++)
{
    *(p+i)=i;
    printf("%d\n",*(p+i));
}
free(p);  // Free the allocated memory when you are done with it
return 0;
}

你不能。 int 的 Memory 是 4 個字節,您只能在該 memory 中存儲單個數字。

對於整數:-2,147,483,647 到 2,147,483,647

對於無符號整數:0 到 4、294、967 295

您可以使用不同大小的其他類型,但如果您想將不同的數字放入一個變量中,則需要使用數組。 int arr[10]; arr[0] = 0; arr[1] = 5; 像這樣的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM