这是我的结构,它有两个整数指针aV和aT。
struct ADJP
{
int *aV;
int eV;
int nV;
int *aT;
int nT;
};
ADJP *Umb = NULL;
aV和aT的分配过程就是这样..
for(int i=0; i<nb; i++)
{
Umb[i].aV = new int[N];
for(int j=0; j<n; j++)
Umb[i].aV[j] = pIn[i].aV[j];
}
我想从Umb数组中删除一个特定元素。例如,我想删除Umb [5],那么我该如何删除。我已经尝试过各种方法,但由于我认为分配了指针而得到了错误。我已尝试使用follow方法,但它不使用这种结构数组。它正在使用没有指针的struct数组。
int DeleteStructElement(int Index, ADJP *b, int N, int at)
{
for(int i=Index; i<N-1; i++)
memmove(&b[i], &b[i+1], (N-at-1)*sizeof*b); // moving the terms of array
N--; // updating new size
return N;
}
有任何想法如何从我的struct数组中删除一个元素?
答案 0 :(得分:2)
您需要删除已删除元素中的数组以释放其内存:
delete[] b[Index].aV;
delete[] b[Index].aT;
然后,您只需要执行一次memmove即可删除该元素。
memmove(&b[Index], &b[Index+1], (N-Index-1) * sizeof(b[Index])
编辑:正如Mahmoud所指出的,这不会使用at
中的DeleteStructElement
参数;我不确定你打算做什么参数。
答案 1 :(得分:2)
int DeleteStructElement (int index, ADJP * b, int nb) {
delete [] (b[index].aV);
for (int i = index; i < nb - 1; ++i) {
b[i] = b[i+1];
}
return nb - 1;
}
答案 2 :(得分:0)
假设您真的使用C ++,ADJP
中的析构函数将比DeleteStructElement
简单明了。
但是如果你用new
/ delete
做一些有趣的“C”(可能是一个有限的C ++子集?),那么我建议你调用delete
在DeleteStructElement
内。
但由于分配了指针而得到错误我认为
回答这个问题可能比其他问题重要得多。我假设这是一个运行时错误?使用调试器来确定故障的确切位置。