gpt4 book ai didi

c - 是否有在 C 中分配内存的最佳实践?

转载 作者:太空宇宙 更新时间:2023-11-04 08:25:03 24 4
gpt4 key购买 nike

我一直在尝试创建一个函数,通过创建一个新的组合矩阵将矩阵 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 - 是否有在 C 中分配内存的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30960222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com