朋友们,我正在尝试将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;
}
答案 0 :(得分:2)
p_arr2 = (int *)malloc(sizeof(int)*2);
您只为2个整数分配了足够的内存,并且您尝试将MAX_ONE
存储在此数组中。这导致写入超出分配的内存块和未定义行为。
您需要分配足够的内存来存储MAX_ONE
元素。
p_arr2 = malloc(sizeof(int)*MAX_ONE);
^^^^^^^^^
此外,您不需要在C中转换malloc
的返回类型。
答案 1 :(得分:0)
除了提到的分配问题之外,在开始打印循环之前,您不必重置p_arr2
以指向数组的开头。所以你要从未初始化的内存中打印。
答案 2 :(得分: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);