c - 从 C 中的函数返回合并的数组

标签 c arrays

我有以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct _item {
    int v, w;
} item;

void printItems(item *t, int n) {
int i;
    for(i= 0; i < n; i++)
    printf("%4i",t[i].v);
    printf("\n");
}

item * newItemSet(int n) {
    int i;
    item *t = (item*)malloc(sizeof(item));
    for (i = 0; i < n; i++){
        (t+i)->v = rand()%100;
        (t+i)->w = rand()%100;
    }
    return t;
}

item * mer(item*a, int n, item*b, int m) {
    int size = m+n;
    item*q = (item*)malloc(sizeof(item)*size);
    int i, c;
    c = 0;
    printf("a----\n");
    printItems(a,n);
    printf("b----\n");
    printItems(b,m);
    for(i = 0; i<n; i++) {
        q[c] = a[i];
        c++;
    }
    for(i = 0; i<m; i++) {
        q[c] = b[i];
        c++;
    }
    printItems(q,size);
    return q;
}   


int main(void) {
    srand(time(NULL));
    item * a = newItemSet(6);
    item *b = newItemSet(6);
    item *c = mer(a,6,b,6);
    printItems(c,12);   
    return 0;
}

在每次执行时,c 的第一部分都是正确的,直到 b 的最后两个元素。我错过了什么?

最佳答案

newItemSet 的分配似乎不正确。应该是:

item *t = malloc(sizeof(item) * n);

关于c - 从 C 中的函数返回合并的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19913719/

相关文章:

c - 如何将一个字符数组中的每第 n 个字符复制到另一个字符数组?

c - 在多个进程之间共享 POSIX 信号量

c - C中的选择排序程序

ios - 获取信息 JSON Google 图书 - IOS

c++ - 如何找出动态分配数组的大小(使用 sizeof())?

javascript - 我想删除没有特定数组的对象

c - 'C' 显示为 2 个不同的值?

c - 为什么将SIGCONT发送给子进程后,子进程无法恢复?

c - 为什么 gcc 中 '-l' 选项的顺序很重要?

python - n 球坐标系到笛卡尔坐标系