arrays - 在 malloc 数组的中间添加一个元素
问题描述
我创建了一个函数,允许从我的 malloc(ed) 数组(结构三角坐标列表)中删除一个元素。这很好用。但是,当我尝试创建一个添加元素(在位置 i 之后)的元素时,它就行不通了……
例如,如果我有一个 [0] [1] [2] [3] [4] [5] 的数组,并且想在 [3] 之后添加一个新值。
这是我的代码:(这是我的while循环中的一个片段)
totaltri++;
addtriangle(trilist, totaltri, i);
i++;
secondtriangle(p, &t1, &t2, &t3, v, i);
i++;
我的代码删除三角形(....):
for (int c = i; c < totaltri; c++)
{
trilist[c] = trilist[c+1];
}
tmp = (triangle *) realloc(trilist, (totaltri-1)*sizeof(triangle));
trilist = tmp;
而我的代码 addtriangle(..): 这似乎不起作用..!
tmp = (triangle *) realloc(trilist, (totaltri+1)*sizeof(triangle));
for (int c = totaltri; c > i; c--)
{
trilist[c-1] = trilist[c];
}
trilist = tmp;
然后,我继续将值分配给刚刚添加到此代码中的第二个三角形:
int p1, p2, p3;
p1 = whereisthepoint(p, *t1, v);
p2 = whereisthepoint(p, *t2, v);
p3 = whereisthepoint(p, *t3, v);
triptr=&(trilist[i]);
triptr->corner=(point *) malloc(3*sizeof(point));
pt1ptr=&(triptr->corner[0]);
pt2ptr=&(triptr->corner[1]);
pt3ptr=&(triptr->corner[2]);
pt3ptr->x=t3->x; etc etc
解决方案
- 您必须将前一个元素的值分配给下一个元素。你的任务被颠倒了。
trilist
通过无效,realloc()
因此您应该tmp
用于移位。- 您必须分配新值才能添加它。
malloc()
家庭铸造结果被认为是一种不好的做法。
addtriangle(....):
应该是这样的:
tmp = realloc(trilist, (totaltri+1)*sizeof(triangle));
for (int c = totaltri; c > i; c--)
{
tmp[c] = tmp[c-1]; /* correctly shift the elements */
}
tmp[i] = new_value; /* assign new value (replace new_value with proper thing) */
trilist = tmp;
推荐阅读
- azure-devops - 在 Azure DevOps 管道中的何处存储构建项目?
- xampp - 为什么 xampp 不想从案例工作室 2 生成代码
- kotlin - 使用 MockK 捕获可变参数?
- node.js - 将 create-react-app 与旧节点版本一起使用
- godot - Godot 3.3.2:刷新查询时无法更改此状态。使用 call_deferred() 或 set_deferred() 来改变监控状态(错误)
- php - 未捕获的 ArgumentCountError:在旧 WP 主题中功能太少的参数
- php - 如何将公式存储在表格中并用作 php 变量进行数学运算?
- gnupg - gpg --list-keys 显示为 keyId 有序列表?
- css - 如何为价格标签制作直平行四边形CSS
- c# - 按位和运算符