gpt4 book ai didi

c - 为什么 opendir 会出现 SIGABRT 错误

转载 作者:行者123 更新时间:2023-11-30 18:58:23 25 4
gpt4 key购买 nike

当我使用 opendir 打开程序中的目录时遇到问题。

我正在使用这行代码来做到这一点:

int main(int argc, char** argv) 
{
int i;
int Port,TPS,QS,Height,Number_kids;
char server_ip[16];
DIR * directory;
struct ps *parms = (struct ps*)malloc(sizeof(struct ps));

if(argc!=8)
{
printf("Wrong number of arguents given!!!\n");
return -1;
}

Port=atoi(argv[2]);
TPS=atoi(argv[3]);
QS=atoi(argv[4]);
Height=atoi(argv[5]);
Number_kids=atoi(argv[6]);

strcpy(server_ip,argv[1]);
strcpy(parms->directory,argv[7]);


if(Height<2 || Number_kids<2)
{
printf("Wrong parameters given!!!\n");
return -1;
}

for(i=2;i<7;i++)
{
int temp=atoi(argv[i]);
if(temp<=0)
{
printf("Wrong parameters given!!!\n");
return -1;
}
}

directory = opendir(parms->directory);
if(directory == NULL)
{
perror("Error when trying to open specified directory:");
return;
}
}

其中 parms->directory

struct ps
{
char directory[50];
};

目录函数包含一个目录路径:/home/user/Desktop/folder(路径正确)

当我在没有调试器的情况下运行程序时,我收到此错误:

    malloc.c:2451: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) *
2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long)
(old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof
(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)
old_end & pagemask) == 0)' failed.

我可以看出,当函数 opendir 使用 malloc (?) 时,它内部出了问题

当我运行调试器时,我收到 SIGABRT 信号和相同的错误。 (我正在使用 Netbeans)

我不明白我做错了什么。如有任何帮助,我们将不胜感激。

最佳答案

如果 malloc() 以这种方式失败,则几乎可以肯定您的程序中存在错误,并且该错误几乎可以肯定是在其他地方。该错误可能位于完全不相关的代码段中。

这些错误通常是由内存损坏引起的。使用 Valgrind 运行您的程序或使用 Mudflap 进行编译已启用。这些必须安装,但如果您用 C 编写代码,它们是工具箱的重要组成部分。它们更有可能指出程序中实际导致内存损坏的部分。

关于c - 为什么 opendir 会出现 SIGABRT 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16871606/

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