首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

結構體指針數組賦值報錯:讀寫衝突 0xC0000005 的根因與修正

     編輯:程式設計綜合問答

錯誤現象

代碼片段:

struct student *q[13];
struct student h[13] = { ... };
for (i = 0; i < 13; i++)
    *q[i] = h[i];  // 此處報:寫入位置 0xCCCCCCCC 時發生訪問沖突

根因分析

  • q 是指針數組,每個元素是未初始化的野指針(調試模式下為 0xCCCCCCCC)。
  • *q[i] = h[i] 試圖通過野指針寫入內存,導致訪問違規。

正確寫法

將指針指向已存在的結構體實例:

for (i = 0; i < 13; i++)
    q[i] = &h[i];  // 取地址賦值給指針

之後通過 q[i]->grade 或 (*q[i]).grade 訪問成員即可。

補充說明

  • 若需動態分配,應用 q[i] = (struct student*)malloc(sizeof(struct student)) 並拷貝數據。
  • 排序函數 swap 中交換的是指針,不移動結構體本身,效率更高。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved