gpt4 book ai didi

c - C中变量声明错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:27 25 4
gpt4 key购买 nike

我在 C 中的变量声明方面遇到了一些问题,希望您能帮助我。

这段代码:

int makeDir(const char* path, mode_t mode) {
printf("Checkpoint 1\n");
String parentPath;
printf("Checkpoint 2\n");
pDirTreeNode parent;
printf("Checkpoint 3\n");
int idx, grp;
pinode inod;
pdir algo=NULL;
printf("Checkpoint 4\n");
pdir direntry=NULL;
printf("Checkpoint 5\n");
t_bitarray *bitarr;

parent = malloc(sizeof(struct dirTreeNode));
parentPath = malloc(DIR_NAME_SIZE);
direntry=malloc(sizeof(struct s_direct));

[COMMENTED code]
}

这些是数据类型声明:

typedef struct s_inode      *pinode;    
typedef struct s_direct *pdir;
typedef char *String;
typedef struct dirTreeNode *pDirTreeNode;

在 linux/ext2_fs.h 头文件中声明了 s_inode 和 s_direct

我已经执行过了,当程序执行到它提示的函数时:

由于共享库事件而停止/build/buildd/gdb-7.3/gdb/dwarf2loc.c:185: 内部错误: dwarf_expr_frame_base: 断言 `framefunc != NULL' 失败。检测到 GDB 内部问题,进一步调试可能证明不可靠。

但它不会停止调试 session 。然后,如果我执行其余代码:

*** glibc detected *** /home/vlad/workspace_SisOp/RFSDev/Debug/RFSDev: realloc(): invalid next size: 0x0000000000a5cdf0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7a6e6)[0x7fa21d6e26e6]
/lib/x86_64-linux-gnu/libc.so.6(+0x7d3e7)[0x7fa21d6e53e7]
/lib/x86_64-linux-gnu/libc.so.6(realloc+0xf9)[0x7fa21d6e6b39]
/home/vlad/workspace_SisOp/RFSDev/Debug/RFSDev[0x402cd3]
/home/vlad/workspace_SisOp/RFSDev/Debug/RFSDev[0x4017a4]
/home/vlad/workspace_SisOp/RFSDev/Debug/RFSDev[0x400af7]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7fa21d68930d]
/home/vlad/workspace_SisOp/RFSDev/Debug/RFSDev[0x4009e9]
======= Memory map: ========
00400000-00404000 r-xp 00000000 00:14 540784 /home/vlad/workspace_SisOp/RFSDev/Debug/RFSDev
00603000-00604000 r--p 00003000 00:14 540784 /home/vlad/workspace_SisOp/RFSDev/Debug/RFSDev
00604000-00605000 rw-p 00004000 00:14 540784 /home/vlad/workspace_SisOp/RFSDev/Debug/RFSDev
00a5c000-00a7d000 rw-p 00000000 00:00 0 [heap]
7fa214000000-7fa214021000 rw-p 00000000 00:00 0
7fa214021000-7fa218000000 ---p 00000000 00:00 0
7fa21b706000-7fa21b71b000 r-xp 00000000 08:16 526333 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fa21b71b000-7fa21b91a000 ---p 00015000 08:16 526333 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fa21b91a000-7fa21b91b000 r--p 00014000 08:16 526333 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fa21b91b000-7fa21b91c000 rw-p 00015000 08:16 526333 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fa21b91c000-7fa21d668000 rw-p 00000000 00:14 273074 /home/vlad/Sistemas Operativos/ext2.disk
7fa21d668000-7fa21d7ff000 r-xp 00000000 08:16 526221 /lib/x86_64-linux-gnu/libc-2.13.so
7fa21d7ff000-7fa21d9fe000 ---p 00197000 08:16 526221 /lib/x86_64-linux-gnu/libc-2.13.so
7fa21d9fe000-7fa21da02000 r--p 00196000 08:16 526221 /lib/x86_64-linux-gnu/libc-2.13.so
7fa21da02000-7fa21da03000 rw-p 0019a000 08:16 526221 /lib/x86_64-linux-gnu/libc-2.13.so
7fa21da03000-7fa21da09000 rw-p 00000000 00:00 0
7fa21da09000-7fa21da2a000 r-xp 00000000 08:16 523159 /lib/x86_64-linux-gnu/ld-2.13.so
7fa21dc10000-7fa21dc13000 rw-p 00000000 00:00 0
7fa21dc26000-7fa21dc29000 rw-p 00000000 00:00 0
7fa21dc29000-7fa21dc2a000 r--p 00020000 08:16 523159 /lib/x86_64-linux-gnu/ld-2.13.so
7fa21dc2a000-7fa21dc2c000 rw-p 00021000 08:16 523159 /lib/x86_64-linux-gnu/ld-2.13.so
7fff21b19000-7fff21b3a000 rw-p 00000000 00:00 0 [stack]
7fff21ba2000-7fff21ba3000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Checkpoint 1
Checkpoint 2
Checkpoint 3
Checkpoint 4
Checkpoint 5

在调试 session 中,代码实际上在 perror("1") 之后爆炸,所以看起来不仅仅是 perror 的问题......

提前致谢!

编辑:我更改了转储消息和函数代码以避免错误。另外,这是完整的主要代码:

pext2fs fsys; // Variable global

int main(int argv, char *argc[]) {
fsys = malloc(sizeof(struct ext2system));

getsysdata();

/* *
* *
* *
* File System Client here *
* *
* *
* */

/* ------------------>Código para probar funciones<------------------ */

pDirTreeNode node;
StringArray test;
void **file=malloc(0);
int ctrl, mode=0x1000;
pdir *dirents;

makeDir("\\Dir2\\DirCreadoInternamente", mode);
node = getDirTreeNode("\\Dir2\\DirCreadoInternamente");
// dirents = list_dir(fsys->root);
// node = getDirTreeNode("\\Dir3\\UnDir");
// ctrl = getFile(&file, "\\Dir1\\LPD");
// printFile(file);

/* ------------------>Fin del código de testing<------------------ */

unmap(fsys->diskmap);

return 0;
}

最佳答案

perror() 函数根据 errno 的当前值打印一条错误消息。在调用设置了 errno 的函数之后调用它才有意义。

例如:

String parentPath;
perror("2");

您还没有做任何可以将 errno 设置为有意义的值的操作,所以您得到的是垃圾。 (errno 可能设置为 EINVAL 作为先前调用 perror() 的副作用)。

errno 的值告诉您哪个 错误发生了。在检查它之前(通过检查 errno 或调用 perror()),您应该首先确定是否发生了错误。大多数设置 errno 的函数也会返回一个指示成功或失败的值。例如,malloc() 在失败时返回空指针。

关于c - C中变量声明错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11174728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com