It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center
                            
                        
                    
                
                                7年前关闭。
            
                    
我正在尝试模拟使用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的东西,并且从许多不同的角度看待它之后,我目前仍陷于困境。任何帮助将是巨大的想法或建议。

最佳答案

可能的问题是这样的:

int **Xcc = new int *[rows];


对于通用i,Xcc [i]尚未初始化,因此对realloc()的调用有时可能起作用(如果Xcc [i]为null),有时可能不起作用(segfault)。

您缺少:

memset(Xcc, 0, sizeof(int*) * rows);

关于c++ - 在循环中使用Realloc ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12428150/

10-12 02:08