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 要素ずつ増加します。新しい長さは、以前の 1 に 1 を加えたものになり、保存されます。
どうやら私には問題ないようですが、それは私が得ているものに依存し、segmentation faults
さまざまな角度からそれを見た後、私は現在立ち往生しています。どんな助けでも、アイデアや提案は素晴らしいでしょう。