1

Xcode で malloc を使用してメモリを割り当てる際に問題が発生しました

小さい Block_size (256) を使用すると、コードに問題はありません 大きな Block_size (65536) を使用すると、Xcode は「state1[t] = (int*) malloc(sizeof(int) * 4);」で停止します。BAD_ACCESSを教えてください。この問題を解決するには?

ありがとう

int main(int argc, const char * argv[]) {
     // insert code here...
    int **state1;
    int t = 0;
    int Block_size = 65535;
    state1 = (int **)malloc(sizeof(int) * Block_size);
    printf("%d",Block_size);
    for (t=0 ; t < Block_size-1 ; t++) {
        state1[t] = (int*) malloc(sizeof(int) * 4);
    }
    printf("end");
    return 0;
}
4

1 に答える 1

1

最初の malloc は

state1 = malloc(sizeof(int *) * Block_size);

ポインタの配列を割り当てるためです。64 ビット プラットフォームでは、これが違いを生みます。書くほうが好きな人もいる

state1 = malloc(sizeof(*state1) * Block_size);

この種のエラーを回避するために。

注: C では、 の戻り値をキャストする必要はありませんmalloc()

于 2013-08-16T12:21:34.857 に答える