今天寫c語言遇到了一個問題:
當我定義了一個結構體,並將其按照二進制寫入到文件裏面。
結構體如下:
// An highlighted block
struct TestData
{
int opp1; //操作數1
int opp2; //操作數2
int key; //標準答案
int num; //用戶輸入
int flag; //對錯標記
};
當我讀取文件的時候,進行了如下操作:
// An highlighted block
strcut TestData*NowQuestion=(struct TestData*)malloc(sizeof(struct TestData*)*1);//使用指針申請一塊空間
fread(NowQuestion, sizeof(struct TestData), 1, ErrorSet);
這時候雖然運行沒問題,但是下面的代碼都會出現符號集無法加載的情況,具體原因我也不知道。
關於fread函數的定義
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr – 這是指向帶有最小尺寸 size*nmemb 字節的內存塊的指針。
size – 這是要讀取的每個元素的大小,以字節爲單位。
nmemb – 這是元素的個數,每個元素的大小爲 size 字節。
stream – 這是指向 FILE 對象的指針,該 FILE 對象指定了一個輸入流。
按理說這個ptr可以是我所申請的文件指針,但是這裏這麼做就是出了問題。
最後我的解決方法:
將指針改爲對於一個已經存在的結構體的引用:
struct TestData NowQuestion;
fread(&NowQuestion, sizeof(struct TestData), 1, ErrorSet);
這樣運行就沒有問題了。
經驗:
當出現符號集無法加載的時候,不要總想着換地址下載符號集什麼的,可能就是你的代碼寫錯了,指針出了問題之類的。