我一直在尝试通过创建一个新的组合矩阵,使一个函数将矩阵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/

10-10 20:10