malloc 呼び出しに問題があります。問題は、この呼び出しが、プログラムで 2 回呼び出す関数にあるということです。関数の 2 番目の malloc は、この関数を 2 回目に呼び出したときにのみクラッシュします。最初のケースでは、2 番目の malloc (元々は 1 番目) がクラッシュし、2 番目のケースでは、同じ関数で後で現れる realloc がクラッシュしました。また、関数を 2 番目の前に 1 回呼び出してみましたが、(新しい) 2 番目の呼び出しでクラッシュし続けました。誰でも私を助けることができますか?これが私のコードです:
int main(int argv, char *argc[]){
fsys = malloc(sizeof(struct ext2system)); // Global pointer var
getsysdata();
list_dir(fsys->root);
// list_dir(fsys->root); // IF THIS LINE IS UNCOMMENTED,
// THE PROGRAM CRASHES ON THIS CALL
// IF NOT, IT CRASHES ON data = get_cont(fsys->root);
pdir dir = malloc(sizeof(struct s_direct));
int* data;
int offs, i;
data = get_cont(fsys->root);
offs = 0;
for (i = 0; i < fsys->root->i_links_count + 2; ++i) {
offs += readdirent(getblock(data[0])+offs, dir);
printf("%.*s\n", dir->name_len, dir->name);
if(dir->file_type==1) printf("%s\n", data);
}
unmap(fsys->diskmap);
return 0;
}
void list_dir(pinode inod){
// Lists a directory contents
pdir dir = malloc(sizeof(struct s_direct));
int* data;
int offs, i;
data = get_cont(inod);
offs = 0;
for (i = 0; i < inod->i_links_count + 2; ++i) {
offs += readdirent(getblock(data[0])+offs, dir);
printf("%.*s\n", dir->name_len, dir->name);
}
}
int *get_cont(pinode inod){
// Recupera contenido de los blocks de datos de un inodo
int *cont=NULL;
int *idx=NULL;
int i=0;
int *block;
cont = malloc(sizeof(int));
idx = malloc(sizeof(int)); // HERE IS WHERE THE PROGRAM CRASHES
// EVEN IF MALLOCS ARE SWAPPED
while(i < inod->i_blocks && i<13) {
// Recupera los 12 primeros bloques directamente
realloc(cont, i*sizeof(int)); // CRASHED HERE WHEN
// I DELETED ONE MALLOC
cont[i]=inod->i_block[i];
i++;
}
if(i < inod->i_blocks){
*idx=13;
block=(int*)getblock(inod->i_block[*idx]);
fetchcont(block, idx, cont, inod->i_blocks, 0);
}
if(i < inod->i_blocks){
block=(int*)getblock(inod->i_block[*idx]);
fetchcont(block, idx, cont, inod->i_blocks, 1);
}
if(i < inod->i_blocks){
block=(int*)getblock(inod->i_block[*idx]);
fetchcont(block, idx, cont, inod->i_blocks, 2);
}
return cont;
}
アドバイスありがとう!