我正在使用opencv的CvPoint2D32f结构,其定义为

typedef struct CvPoint2D32f
    {
        float x; /* x-coordinate, usually zero-based */
        float y; /* y-coordinate, usually zero-based */
    }
    CvPoint2D32f;

我试图分配这些对象的指针数组,如下所示,并且它不起作用。如何做到这一点?
CvPoint2D32f *cvpoints[8];
for (i = 0; i < 16; i++)
    {
        if (i % 2 == 0)
        {
            (*cvpoints)[i/2].x = float(points[i]); // points is an array of ints.
        }
        else
        {
            (*cvpoints)[i/2].y = float(points[i]);
        }
    }

最佳答案

您有一个指向CvPoint2D32f的指针数组,而不是这些结构本身的数组。您没有为实际结构分配内存。您有三种选择:

  • 将您的声明更改为CvPoint2D32f cvpoints[8];,以便将所有结构都放在堆栈的数组中。
  • 为指针分配数组后,添加一个malloc语句来分配内存。例:
    CvPoint2D32f *cvpoints[8];
    for (i = 0; i < 8; i++)
        {
        cvpoints[i] = (CvPoint2D32f *)malloc(sizeof(CvPoint2D32f));
        }
    
  • 使用malloc为所有结构分配大小。例:
    CvPoint2D32f *cvpoints = (CvPoint2D32f *)malloc( 8 * sizeof(CvPoint2D32f));
    
  • 关于c - 如何分配指向结构的指针数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5358484/

    10-11 16:41