簡體   English   中英

C-分段錯誤:11

[英]C - Segmentation fault : 11

嗨,我必須為我的大學做一個磁盤模擬。

我有2個檔案:

tttfs.h:

#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>

typedef struct _disk disk;
typedef struct _block block;

struct _block{
    uint8_t *unBlock;
};

struct _disk{
    int id;
    block *diskBlock;
};

tfs_create.c:

#include "tttfs.h"

uint8_t little[4];

int tttfs_create(int size, char *name);
void inttolitend(uint32_t x, uint8_t* lit_int);

int main(){
    tttfs_create(7, "disk.tfs");
}

int tttfs_create(int size, char *name){
    FILE *f = NULL;
    if ((f = fopen(name, "wb"))!=NULL)
    {
    disk *d = malloc(sizeof(disk));
    d->diskBlock = malloc(1024);
    d->id = 1;
    int i;
    for(i = 0; i<size; i++){
       printf("%d\n", i);
       d->diskBlock[i].unBlock = malloc(1024); //I got the segmentation fault here
    }
    inttolitend(size, little);
    for(i = 0; i<4; i++){
       d->diskBlock[0].unBlock[i] = little[i];
    }
    for(i = 0; i<size; i++){
       fwrite(&d->diskBlock[i],1024,1,f);
    }
    }
    else
        printf("Erreur\n\n");
    return 0;
}

void inttolitend(uint32_t x, uint8_t* lit_int){
   lit_int[3] = (uint8_t)x / (256*256*256);
   lit_int[2] = (uint8_t)(x % (256*256*256)) / (256*256);
   lit_int[1] = (uint8_t)((x % (256*256*256)) % (256*256)) / 256;
   lit_int[0] = (uint8_t)((x % (256*256*256)) % (256*256)) % 256;
}

我想在文件中寫入多個塊(此處為7),所以我在磁盤結構的大小上執行malloc,然后在diskBlock上執行malloc以使表d-> diskBlock [0] .unBlock = malloc( 1024); 但沒有更多。 我如何對我的結構塊[size]? (我的c不好)

我想你應該改變這條線

d->diskBlock = malloc(1024);

d->diskBlock = malloc(sizeof(block) * size);

和這個

d->diskBlock[i].unBlock = malloc(1024);

d->diskBlock[i].unBlock = malloc(sizeof(uint8_t) * 4);

暫無
暫無

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

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