我知道這個問題已經被問過幾次了,但是給出的答案都不適合我。我有一個帶有 2 個 int 變數和一個 unsigned char 指標的結構,我正在創建一個指向該結構的指標。然后我想修改 2 個 int 變數的值,并使用 fread() 獲取一個 .raw 檔案(位于資源檔案檔案夾中,也許它需要在其他地方?)并將其放入 unsigned char 指標。但是 fread() 總是回傳 0,并且當我嘗試在結構指標上使用 free() 時程式崩潰。到目前為止,這是我的代碼:
結構:
typedef unsigned char UCHAR;
struct IMAGERAW
{
int height;
int width;
UCHAR* image;
};
typedef struct IMAGERAW IMAGE;
主要的:
int main()
{
IMAGE *img;
img = read_image();
free(img->image);
free(img);
}
讀取影像():
IMAGE *read_image()
{
IMAGE* img;
FILE* fpI;
int height = 1409;
int width = 1690;
int freadReturn;
fpI = fopen("file.raw", "rb");
img = (IMAGE*)malloc(sizeof(IMAGE));
img->height = height;
img->width= width;
freadReturn = fread(img->image, sizeof(UCHAR), img->height * img->width, fpI);
printf("fread() returns : %d", freadReturn);
fclose(fpI);
return img;
}
freadReturn 變數始終設定為 0(我認為它應該設定為高度 * 寬度),并且程式在“free(img->image);”行給出錯誤。尺寸是正確的,如果我更改它們,程式會更早崩潰,檔案名也是如此,所以我真的不知道我做錯了什么。提前致謝!
uj5u.com熱心網友回復:
正如@BoP 所提到的,我不知何故忘記為結構的無符號字符指標分配記憶體。所以我加了
img->image = (UCHAR*)malloc(img->height * img->width);
就在 fread() 行的正上方,現在 fread() 回傳一個正確的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/384370.html
下一篇:區塊鏈游戲是什么
