-1

プログラムで 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.

malloc (?)

デバッガーを実行すると、SIGABRT シグナルと同じエラーが発生します。(私はNetbeansを使用しています)

私はそれで何が間違っているのか理解できません。どんな助けでも大歓迎です。

4

1 に答える 1

2

この方法で失敗した場合malloc()、それはほぼ確実にプログラムのバグであり、バグはほぼ確実に別の場所にあります。バグは、まったく関係のないコードにある可能性があります。

これらのエラーは通常、メモリの破損が原因で発生します。Valgrindを使用してプログラムを実行するか、 Mudflapを有効にしてコンパイルします。これらはインストールする必要がありますが、C でコードを記述している場合、ツールボックスの不可欠な部分です。実際にメモリ破損を引き起こしているプログラムの部分を指摘する可能性が高くなります。

于 2013-06-01T10:20:26.473 に答える