簡體   English   中英

指針重新分配導致分段錯誤

[英]pointer reassignment gives segmentation fault

我在理解為什么我不能對 lastPrefix 進行重新分配時遇到問題,在指定的行上它給了我一個段錯誤。 我似乎缺少一些基本的東西。

char * somefunc(char ** strs, int numStrings)
{
    char * lastPrefix;
    printf("%d\n", *(strs[0]+0));
    printf("%d\n", *(strs[1]+0));
    printf("%d\n", *(strs[2]+0));
    printf("%d\n", *(strs[0]+1));
    printf("%d\n", *(strs[1]+1));
    printf("%d\n", *(strs[2]+1));
    printf("%d\n", *(strs[0]+2));
    printf("%d\n", *(strs[1]+2));
    printf("%d\n", *(strs[2]+2));
    printf("%d\n", *(strs[0]+0));
    printf("%d\n", *(strs[1]+0));
    printf("%d\n", *(strs[2]+0)); // ALL IS WELL
    *lastPrefix  = *(strs[1]+0);
    *lastPrefix  = *(strs[2]+0);
    *lastPrefix  = *(strs[0]+1);  // WILL SEGMENT FAULT HERE
    *lastPrefix  = *(strs[1]+1);
    *lastPrefix  = *(strs[2]+1);


}


int main()
{

    char * strs[] = {
        "flower", "flow", "flight"
    };
    
    char * res = somefunc(strs, SIZEOF(strs));
}

我還可以要求一個很好的 C 指針參考嗎?

當您創建任何變量時,無論是指針還是數據,變量的初始值都會是一些垃圾或 0。在您的情況下,

char *lastPrefix;

就是這樣一個變量,里面包含了一些垃圾值。 你必須使用malloc()或類似的東西給它一個有效的值。 否則,當您取消引用它 ( * ) 時,它可能指向某個無法訪問甚至不存在的內存位置。 也許它指向你的代碼的中間。 也許它指向NULL。 這樣的記憶在用戶空間中是無法訪問的。 所以,windows(或linux)會殺死你的程序。

你想做什么:

char *lastPrefix;
lastPrefix=malloc(101);   //holds strings upto 100 characters

malloc()將從堆中分配值到您的變量中,程序應該可以正常工作。 只記得最后釋放內存: free(lastPrefix);

int *ptr; // pointer variable declaration */

int kk; // actual variable declaration */

*a = 11; //  `a` pointing to unknown memory address and accessing this will give segmentation fault/

a = &kk; *a = 11 // This is valid. store address of `kk` in pointer variable  */

同樣,在您的代碼中lastPrefix指向一個未知地址,訪問它會給您帶來分段錯誤。

暫無
暫無

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

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