我试图模拟使用 push_back 时矢量容器的行为。我创建了一个指针数组。每个元素可以有不同的长度,所以每次存储新元素时我都需要重新分配:
void *reallocf(void *p, size_t s)
{
void *tmp = realloc(p, s);
if(tmp) return tmp;
free(p);
return NULL;
}
int main(){
int rows = 9000;
int cols = 23000;
int *matrix = (int*)malloc(sizeof(int)*rows*cols);
//counter of elements
int *nums = new int [rows];
memset(num, 0, sizeof(int)*rows)
/* populate matrix*/
....
int **Xcc = new int *[rows];
for(i = 0; i < rows; i++){
for(k = 0; k < cols; k++){
if(matrix[i*cols +k] == 0){
Xcc[i] = (int*) reallocf(Xcc[i], sizeof(int)*(num[i]+1));
Xcc[i][num[i]] = k;
num[i]++;
}
}
}
}
基本上我所做的是存储一个元素的位置为 0。因此,Xcc[i]
每次需要时,数组都会增加一个元素。新长度将是前一加 1,它将被存储。
显然对我来说似乎很好,但这取决于我得到的东西,segmentation faults
并且在从许多不同的角度观察它之后,我目前被卡住了。任何帮助都会很棒,想法或建议。