C語言指標問題 程式總是有記憶體錯誤? 尋求幫助謝謝!!

發布 科技 2024-08-20
16個回答
  1. 匿名使用者2024-02-01

    p2 是乙個 null 節點,而 loop 執行 p2->next=p1; 最後分配的 p1 節點不會釋放。 程式的邏輯有點問題,所以讓我們整理一下,給你乙個建議。

    鍊表可以做成下面,組織會更清晰。

    void initlink(linknode *link)void addlink(linknode *link, elem e)

  2. 匿名使用者2024-01-31

    第一組問題是正確的,第二組是錯誤的。

    第二組問題在函式中有乙個類似 k = *s 的語句,它給指標分配了乙個 int 整數,這可能會得到正確的答案,但它違反了 c 的語法,很危險。 例如,如果 s 指向的整數不能表示有效位址,則 k 得到乙個錯誤位址,然後使用錯誤的值進行處理,這可能會導致系統崩潰等問題。 雖然程式實際上並不訪問 K 指向的內容,但通用編譯器會有這種保護,並且這種語句在某些編譯器上不起作用。

    int main()

    另外,大括號也是很不規範的,建議房東看一些好的程式設計風格**,有助於養成好習慣,以後做專案開發會容易很多!

  3. 匿名使用者2024-01-30

    k=s;s=t;t=k;這三個語句確實有指標交換,但你應該注意的是,main 函式中的指標是沒有交換的,這是關於指標變數的生命週期,當 main 函式呼叫 f 函式時,f 函式會產生指標變數 t 和 s; 它確實交換了這兩個指標指向的物件,但不會更改 main 函式中的指標 p 和 q; 並且指標變數 t 和 s 在函式呼叫後被釋放,這沒有意義。

  4. 匿名使用者2024-01-29

    您的問題是為什麼在第乙個問題中交換了指標以及為什麼沒有交換輸出,對嗎? 呼叫函式時,為 f 函式重新開啟乙個空格,並在 f 函式中重新定義 s t k,並且只交換 f 函式中的值,而不交換 main 函式中的 p q。

  5. 匿名使用者2024-01-28

    該程式未完全發布。

    在圖中,第 23 行應為:

    scanf("%d",&number);

    還有第 51 行、第 53 行是完全多餘的,可以刪除。 同樣,上述情況 2:......可以刪除所有相關行。

    第 61 行應向上移動到原第 58 行的頂部。

  6. 匿名使用者2024-01-27

    通常,分配函式的次數與程式實際使用的次數一樣多,當然還有指向第乙個位址的指標。

  7. 匿名使用者2024-01-26

    最有可能的是,這是系統的限制,系統不允許這樣做。

  8. 匿名使用者2024-01-25

    ARR 是二級指標。

    if(arr != null)

    free(*arr);

    free(arr);試試吧。

  9. 匿名使用者2024-01-24

    尺寸

    好吧,如果你想測量指標指向的記憶體空間的大小,那麼你不能。

  10. 匿名使用者2024-01-23

    如果你宣告的指標型別是 x,那麼當指標 +1 時,指標會自動移動記憶體中 sizeof(x) 的長度,例如上面的 ptr,當他 +1 時,指標會移動 sizeof(int)=4 位元組的長度,當然位址也會相應變化。 這是由編譯器決定的,編譯器其實很“聰明”。

  11. 匿名使用者2024-01-22

    這個例子和你上面的分析並不矛盾,這個例子的指標型別和指標點型別是一樣的,如果不一致,編譯器會自己處理,比如編譯器會自己轉換它的型別。

  12. 匿名使用者2024-01-21

    指標賦值為 null。

    例如,int *p=null;

    這不會使您定義的指標成為百搭指標,並且在檢查指標時可以一目了然地看到指標的初始狀態,因此很容易知道現在該如何處理它。

    此外,集團IDC網路上還有很多產品**,價格便宜,口碑好。

  13. 匿名使用者2024-01-20

    int*ptr=array 中的步長; 它已經定義好了,它是 int 的長度。

  14. 匿名使用者2024-01-19

    對於 int array[20],每個 int 是 4 個位元組,因此陣列陣列總共有 80 個位元組!

  15. 匿名使用者2024-01-18

    你的 p1 指標沒有初始化,即你的 p1 指標沒有指向某個字元陣列,你給它所指向的記憶體單元分配了乙個值,這肯定會在執行時導致你的上述錯誤,所以你應該做以下操作:

    char b[100];定義乙個字元陣列 bp1=b;

    在第二個 for 迴圈之前,您還需要使指標 p1 重新指向字元陣列 b 的第乙個元素的位址,即 p=b;

    if(p1+i != p1+m-1-i)這個判斷條件也是錯誤的,p1是指標,指標是位址,而不是指標所指向的記憶體單元的值,你是在比較位址值是否相等,當然不相等,應該改為:

    if(*(p1+i) != *(p1+m-1-i))這是指標指向的記憶體單元值的比較。

  16. 匿名使用者2024-01-17

    **複製起來,你就得玩**麻煩看圖片了。

相關回答
18個回答2024-08-20

………童鞋:你搞砸了你的指標。

首先,填充功能確實設定了您分配給它的所有空間'\0',但指標 p 不再指向您分配的空間,而是指向記憶體中“堆”的頂部; 然後,func 2 再次將其向上移動,按 num 位和位元組移動它,此時它指向 **? 反正不是你想要的地方。 將它指向的記憶體設定為'\0',則 strlen 應該得到 0,後面跟著 blank 將沒有任何輸出。 >>>More

14個回答2024-08-20

b 是應指向有意義的位址的指標,例如:

int c; >>>More

5個回答2024-08-20

<>在這個程式中,我們首先提示使用者輸入正方形的尺寸,然後輸入正方形的元素。 接下來,我們通過遍歷正方形的每一行並使用指標指向每行相應列中的元素來找到正方形矩陣的對角線元素的總和。 最後,我們輸出結果。 >>>More

8個回答2024-08-20

運算元錯了,p=0 改為 p==0 在 c p=0 是讓 p=0 p==0 是判斷 p 是否為 0

8個回答2024-08-20

從**本身和執行情況來看,可執行程式的內容與貼上的**不匹配(可能是修改後沒有重新編譯,而修改前的**執行,否則不會**現在出現可以編譯傳遞的錯誤,例如第二行末尾有更多的“op”, 和“現有1人捐款無產出”),修改建議如圖所示: