我一直在尝试通过创建一个新的组合矩阵,使一个函数将矩阵B附加到矩阵a上。我创建的第一个函数将一个指针(在main()中声明)传递给该函数,然后该函数将指针上移以添加值。这奏效了。但是,我也尝试了一种不同的方法,在函数中使用malloc()来定义指针,这样函数就更具可移植性和动态性。然而,当我试图在最终矩阵中打印最终值时,我得到了未定义的行为。
这是我创建的头文件中包含的函数。
#include <stdio.h>
#include <stdlib.h>
int *fAddArrays(int *A, int *B, int a, int b)
{
int *O;
O = (int *) malloc((a+b) * sizeof(int));
int c;
int d;
for (c = 0; c < a; c++)
{
*O = *A;
A++;
O++;
}
for (d = 0; d < b; d++)
{
*O = *B;
B++;
O++;
}
return O;
}
下面是main()中函数的用法
#include <stdio.h>
#include <unistd.h>
#include "CustomArray.h"
#include <stdlib.h>
int main(void)
{
int A[5] = {1,2,3,4,5};
int B[7] = {6,7,8,9,10,11,12};
int a = 5;
int b = 7;
int c = a + b;
int x = 0;
int NewArray[c], *ArrayPtr;
ArrayPtr = fAddArrays(A,B,a,b);
for( x = 0; x < c; x++)
{
*(NewArray + x) = *ArrayPtr;
printf("Value of NewArray[%d] = %d\n", x, *ArrayPtr);
sleep(1);
ArrayPtr++;
}
return 0;
}
最佳答案
你的问题是你增加O然后返回它。
您需要保存原始值并增加一个副本。
int *fAddArrays(int *A, int *B, int a, int b) {
int * original = (int *) malloc((a+b) * sizeof(int));
int * p = original;
for (int c = 0; c < a; c++) {
*p = *A;
A++;
p++;
}
for (int d = 0; d < b; d++) {
*p = *B;
B++;
p++;
}
return original;
}
关于c - 使用Malloc()的功能不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30960222/