char *の配列へのポインタを関数(args)に送ります。この関数では、mallocされた文字列に対する配列の最初の2つの位置に値を設定します。配列自身がmallocされた関数呼び出し関数に戻ると、配列の最後の位置に "アドレス0x0のメモリにアクセスできません"というメッセージが表示されます。 malloc/realloc /で値が格納されていて、何か間違っていますか?関数から文字列の配列を返すときに、アドレス0x0のメモリにアクセスできません
呼び出す機能: -
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)がまず1位の位置0に保存するために呼び出さ:この行では
*args[*argnum] = newstr(start, *len); //Generate the string through malloc
、私はこれらの位置で文字列を持っています: * args [0]と* args [1]
args [0]には文字列がありますが、args [1]には " ddress 0x0 "
なぜ 'read_segment'に' args'のアドレスを渡しますか? 'argnum'のタイプは何ですか? 'read_segment()'と 'newstr()'というコードはありません。 –
タイプが何であるか、コードの一部しか表示していない場合は、質問に答えるのは非常に難しいです。 –
'read_segment'の関連定義を追加できれば、問題はより明確になります。また、sizeof(char *)は固定されます(32ビットの場合は4、64ビットの場合は8)ので、スポットはすべての反復で一定の係数(4または8)だけインクリメントされます。 – vvnraman