1

関数(args)へのchar*の配列へのポインターを送信します。その関数では、配列の最初の2つの位置に値を設定して文字列をmallocします。配列自体がmallocされた元の呼び出し関数に戻ると、配列の最後の位置に「アドレス0x0のメモリにアクセスできません」と表示されます。malloc / realloc /で何か間違ったことをしているのですか、それとも値を保存していますか?

関数の呼び出し:

int bufspace = 0; /* bytes in table */

    ...

args = emalloc(BUFSIZ); /* initialize array */
bufspace = BUFSIZ;     //size=8192
spots = BUFSIZ / sizeof(char *);

while (*cp != '\0') //While not at the end
    cp = read_segment(cp, &len, &indollarsign, &argnum, start, &args, &prev_char_escape);
    start = cp;
    len = 0;

    if (argnum + 1 >= spots) {
        args = erealloc(args, bufspace + BUFSIZ);
        bufspace += BUFSIZ;
        spots += (BUFSIZ / sizeof(char *));
        }
    }

呼び出された関数(read_segment)-最初に呼び出されて位置0に格納され、次に位置1に格納されます。

*args[*argnum] = newstr(start, *len); //Generate the string through malloc

この行では、*args[0]と*args[1]の位置に文字列があります。

しかし、呼び出し元の関数に戻るとすぐに、args [0]には文字列がありますが、args[1]には「アドレス0x0のメモリにアクセスできません」と表示されます。

4

1 に答える 1

2

*args[*argnum]でポインタを逆参照しますargs[*argnum]。私はあなたが意味したと思います

(*args)[*argnum] = newstr(start, *len);
于 2012-04-21T20:06:21.123 に答える