0

こんにちは、私は要素をarr2[]ポインターp_arrに割り当てようとしていて、そこから印刷しようとしていますp_arr...

期待値が得られず、何かがおかしくなっていると思います...

#include <stdio.h>
#include <stdlib.h>

#define MAX_ONE   9
#define MAX_TWO   9


int arr1[] = {10,20,30,40,50,67,23,47,79};
int arr2[] = {5,15,25,35,45,34,45,67,89};

int *main_arr[] = {arr1,arr2};

int main()
{
    int i;
    int *p_arr2;

p_arr2 = (int *)malloc(sizeof(int)*2); 

    for(i=0;i<MAX_ONE;i++)
    {
        *p_arr2++ = arr2[i];
        arr2[i] = arr1[i];
    }

    for(i=0;i<MAX_TWO;i++)
    {
        printf("%d\n",*(p_arr2));
        p_arr2++;
        //printf("%d\t",arr2[i]);
    }

    system("PAUSE");   

    return 0;
}
4

3 に答える 3

2
p_arr2 = (int *)malloc(sizeof(int)*2); 

2 つの整数に十分なメモリしか割り当てておらずMAX_ONE、この配列に格納しようとしています。これにより、割り当てられたメモリ ブロックを超えて書き込みが行われ、未定義の動作が発生します。

MAX_ONE要素を格納するのに十分なメモリを割り当てる必要があります。

p_arr2 = malloc(sizeof(int)*MAX_ONE); 
                           ^^^^^^^^^

mallocまた、 Cでは戻り値の型をキャストする必要はありません。

于 2013-03-04T05:55:09.373 に答える
0

p_arr2前述の割り当ての問題に加えて、印刷ループを開始する前に、配列の先頭を指すようにリセットしません。したがって、初期化されていないメモリから印刷しています。

于 2013-03-04T06:01:38.240 に答える
0

これを試して。また、常に動的に割り当てられたメモリを解放しようとします

     p_arr2 = malloc(sizeof(int)*MAX_ONE); 

      for(i=0;i<MAX_ONE;i++)
      {
           p_arr2[i] = arr2[i];
           arr2[i] = arr1[i];

      }

     for(i=0;i<MAX_TWO;i++)
     {
            printf("%d\n",*(p_arr2 + i));;
            //printf("%d\t",arr2[i]);
     }
     free (p_arr2);
于 2013-03-04T06:02:34.787 に答える