gpt4 book ai didi

C,在结构[]中分配一个数组

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

我有一个带有指针的结构[4]。我必须为所有 4 个结构分配这个指针

//Here a simplification of my code that produces the same error:

typedef struct{
int *val;
}test_T;

void testAllocSingle(test_T *in){
in->val = (int *)calloc(10, sizeof(int));
}

void testAlloc(test_T *in){
int i = 0;
for (i=0; i<4; i++){
testAllocSingle(&(in[i]));
}
}

void main(void){
test_T a[4];
test_T b[4];
testAlloc(a);
testAlloc(b);
memcpy(b, a, 4*10*sizeof(int));
//FATAL RUN-TIME ERROR: Array argument too small (16 bytes). Argument must contain at least 160 bytes (160 elements).
}

我分配的数组对 main 不可见。我在传递变量时做错了,谁能告诉我在哪里?

谢谢

最佳答案

不清楚您要复制的内容,但是 4 * 10 * sizeof(int) 在任何情况下都不正确。您还没有分配任何单个连续 block 的大小。

如果你只想复制结构数组,它只是复制指向数组的指针,它是:

memcpy(b, a, 4 * sizeof(test_t));

请注意,这会导致内存泄漏,因为您从未释放在 b 中分配的内存。

如果你想复制每一个整数数组,它是

for (int i = 0; i < 4; i++) {
memcpy(b[i].val, a[i].val, 10 * sizeof(int));
}

这不会泄漏任何东西,因为它只是复制数组中的整数,而不是更改指针。

关于C,在结构[]中分配一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57403127/

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