0

ポインターを介して間接的に値を渡すことができることを理解しています。あるアドレス (ポインター) に値 (*) を割り当てて、何か (char など) に等しくすることを指定します。

// This works: I can pass char indirectly via pointers    
// by saying "value at char pointer line equals c1 or c2"

char c1 = 'a';
char c2 = 'b';
char* line;

*line = c1;    
*(line+1) = c2;

上記の *(line+1) を使用して、メモリ空間を右にスライドできます。ただし、ループすると、これは失敗します(以下):

// Output: "Process returned -1073741819 (0xC0000005)"    
// Why?   

char c;    
char* line1;    
int i = 0;

while ((c = getchar()) != EOF){
    *(line1+i) = c;    
    i++;    
}

出力: 「プロセスは -1073741819 (0xC0000005) を返しました」

while ループで反復しようとすると、ポインターを介して間接的に値を渡すことができないのはなぜですか? 本当にありがとう!

4

4 に答える 4

3
  1. line1は初期化しないため、line1に値を割り当てることはできません。
  2. line+iでアクセスしてはいけないメモリにアクセスしています

多分あなたはこのようなものが欲しいでしょう:

char c;

char array[100];   // Allocate space for 100 chars

char* line1 = array;    // Pointer to allocated memory block

int i = 0;

while ((c = getchar()) != EOF)

{

    *(line1+i) = c;

    i++;
    // Exit when i == 100
}
于 2012-10-18T13:58:12.840 に答える
0

line1 を正しく初期化しないと、機能しません。

char line1[500];代わりに試してくださいchar* line1;- テストのみ。500 文字を超えるとクラッシュします。

于 2012-10-18T14:00:20.490 に答える
0

Line1 は何も初期化されていません。それが指すアドレスは未定義です。

C (または C++) では、変数をポインター型として宣言すると、変数に有効なアドレスが自動的に割り当てられません。このようなもの。

DataType *a_certain_ptr;

a_certain_ptr には何が含まれていると思いますか? 別の例がヒントになるかもしれません。

int a_certain_number;    // this line is in some function.

a_certain_number の値は?

a_certain_number が何であってもよいことを理解するのは難しいことではありません。初期化されていないため、その値は定義されていません。1、-1、または 15033 などになります。

a_certain_ptr についても同様です。この変数は、初期化していないため、任意の値を含めることができます。1、-1、353210、またはスタック上のどこかを指す有効なアドレスでさえあります...

後で実行しようとすると

*(line1+i) = c;

i*sizeof(char)バイトでオフセットされた無効なアドレスを参照していますが、これはまだ無効です....

于 2012-10-18T14:20:41.797 に答える
0

line1 にアドレスを割り当てることはありません。つまり、どこかを指すか、それが指すバッファーを割り当てます。

于 2012-10-18T13:57:56.447 に答える