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 回答