我在使用 malloc 调用时遇到了一些麻烦。问题是这个调用是在一个我在我的程序上调用两次的函数上进行的。该函数的第二个 malloc 仅在我第二次调用此函数时崩溃。我尝试交换其中一些的顺序,甚至删除一个。在第一种情况下,第二个 malloc(最初是第一个)崩溃了,在第二种情况下,它崩溃了稍后出现在同一函数中的 realloc。另外,我尝试在第二次之前调用我的函数一次,并在(新的)第二次调用时一直崩溃。谁能帮我?这是我的代码:
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;
}
谢谢指教!