メモリアドレスの互換性の問題を回避する方法分割エラー(コアダンプ)

メモリアドレスの互換性の問題を回避する方法分割エラー(コアダンプ)

調査中に一般ルールをハッキングし、Cメモリアドレスを変数に保存しようとしましたが、コードが失敗しました。分割エラー(コアダンプ)64ビットシステムで実行している場合。その理由は、4/8ビット(32/64ビットシステム)メモリによるものです。問題は、uintptr_t両方のシステムを満たすためにどの基本タイプが必要ですか?(いいえ)です。long long int?私のソース:

int main() {
    int i;

    char char_array[5] = {'a', 'b', 'c', 'd', 'e'};

    unsigned int hacky_nonpointer;

    hacky_nonpointer = (unsigned int) char_array;

    for(i=0; i < 5; i++) {
        printf("[hacky_nonpointer] points to %p, which contains the char '%c'\n",
            hacky_nonpointer, *((char *) hacky_nonpointer));
        hacky_nonpointer = hacky_nonpointer + sizeof(char);
    }
}

答え1

適切なポインタ型を使用してください。

#include <stdio.h>

int main() {
    int i;

    char char_array[5] = {'a', 'b', 'c', 'd', 'e'};
    char *char_pointer = char_array;

    for(i=0; i < 5; i++) {
        printf("[char_pointer] points to %p, which contains the char '%c'\n",
           char_pointer, *char_pointer);
        char_pointer++;
    }
}

関連情報