プロが教える店舗&オフィスのセキュリティ対策術

色々試してみましたが全くわかりませんでした。
何が原因のエラーなのでしょうか?
また、どのように修正すればよいのでしょうか?
エラーメッセージの一部です。

(.fini+0x0): `_fini' が重複して定義されています
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crti.o(.debug_info): 再配置 0 が無効なシンボル索引 7 を持っています
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crti.o(.debug_info): 再配置 1 が無効なシンボル索引 8 を持っています

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
char moji;
struct node *next;
} NODE;

NODE head;

int
main ()
{
char n;
char del;
NODE *p;
NODE *cur;
NODE *pcur;
NODE *new;

head.next = NULL;
cur = &head;

do
{
scanf ("%c%*c", &n);

if (n == '-')
continue;

new = (NODE *) malloc (sizeof (NODE));

if (new == NULL)
{
printf ("malloc error\n");
return 0;
}

cur->next = new;
new->moji = n;
new->next = NULL;
cur = new;
printf("n='%c'\n",n);
}
while (n != '-');

printf("消したい文字を入力");
scanf("%c%*c", &del);

for(cur = &head; cur->next != NULL; cur = cur->next;){
if(cur->next->moji == del){
p = cur->next;
cur->next = cur->next->next;
}
}

cur = head.next;
while (cur != NULL)
{
printf ("%c\n", cur->moji);
cur = cur->next;
}

while(1) {
cur = head.next;
pcur = &head;
while( cur->next != NULL )
{
pcur = cur;
cur = cur->next;
}

free(cur);
pcur->next = NULL;
if( head.next == NULL ) break;
}
return 0;
}

質問者からの補足コメント

  • どう思う?

    linux でコンパイルしています。
    gcc -o 名前.c 名前 といった感じです。
    メモリリークということはmallocでメモリ確保しなければいけないということでしょうか?

    エラー内容は重複して定義と無効なシンボルと書いてあります。

      補足日時:2015/11/19 12:38

A 回答 (8件)

>メモリリークということはmallocでメモリ確保しなければいけないということでしょうか?



malloc()で確保したメモリ、どこで解放しています?
特に最初のループで確保した『複数の』メモリブロックを。
ループ2回目以降のmalloc()が失敗したときも盛大にリークしてますけどね。
# まぁ、そのあとプロセス終了するのでまともなOSであれば問題にはなりませんけど…行儀がいいとは言えませんね。
    • good
    • 0

とりあえず, どのようにコンパイルしたのかを「正確に」書いてください.



「gcc -o 名前.c 名前 といった感じです」
のように曖昧にするのではなく, ね.
    • good
    • 1

gcc -o 名前 名前.c とすべき。

    • good
    • 1

> gcc -o 名前.c 名前


↑嘘ですよね?これだと絶対コンパイルできませんよ?(名前.cがえらいことになります...)
    • good
    • 0

ついでに…エラーメッセージの一部でWeb検索すると…



http://stackoverflow.com/questions/10056724/link …
なんてのがヒット。
gccへのオプション指定とか間違っていませんか?
    • good
    • 0

似たような質問を最近見たような気がしますが…。



>for(cur = &head; cur->next != NULL; cur = cur->next;){
の行でコンパイルエラーが指摘され、
指摘されているエラーを解消したら正常にビルドできましたよ。
CentOS7.xにて。

実行結果は期待通りにはなりませんでしたが。
# ってか、書かれている通りならメモリリークしますけど
    • good
    • 0

リンクエラーのようですが、コンパイラ(リンカー)へのオプション(与えたパラメータ)の全てがないと、なんとも言えません...

    • good
    • 0

ちょっと確認.



「エラーメッセージの一部です」ということだけど, 具体的にはエラーメッセージのどの辺の「一部」なの?

まさか「最後の方」なんて言わないよね?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!