最近、Cポインタで問題が発生しました。ご覧のとおり、STDINからデータを読み取るループがあります。問題は、自分が何をしたのかよくわからないことです。
このstruct_CONTAINER構造体にメモリを割り当てました。BUFFER_SIZEの長さのc文字列の配列が必要でした。私が正しく理解していれば、この配列にはBUFFER_SIZE(char *)オブジェクトが含まれています。つまり、この配列の重みは8 * BUFFER_SIZEバイト(各charポインターに対して最大8バイト)になります。したがって、たとえば、BUFFER_SIZEが値10で定義されている場合、この配列に80バイトが与えられ、構造全体のサイズはおそらく同じになります。
問題は、BUFFER_SIZEより大きい値でそのポインタを反復処理できることと、私にとって奇妙なことです。つまり、メモリはNULLではありません。そのループで、すでに割り当てられている他のメモリにアクセスしようとしている可能性があることを私は知っています。確信はないけど。誰かが親切で、私が正しいことと間違っていることを教えてくれたら。メモリ割り当てが大きすぎる可能性があります。前もって感謝します!
char *item = NULL;
if( dup2( STDIN_FILENO, fdin ) < 0 ){
perror( "dup2( )" );
exit( errno );
}
memset( reading, '\0', BUFFER_SIZE );
struct struct_CONTAINER{
char *container[BUFFER_SIZE];
};
while( ( r_control = read( fdin, reading, BUFFER_SIZE-1 ) ) > 0 ){
item = &shmemContainer->container[i++];
strcpy(item, reading);
memset( reading, '\0', BUFFER_SIZE );
}
編集:「アイテム」変数のタイプを表示するのを忘れました