我正在排队,并且一直遇到排队问题。我认为这是相关代码:
id
每当我尝试运行程序时,在运行时都会收到此错误:
引发异常:读取访问冲突。
arr = np.array([[1, 2],
[3, 4],
[5, 6]])
arrflat = arr.flatten()
assert arrflat.base is not arr
arrravel = arr.ravel()
assert arrravel.base is arr
为nullptr。
为什么它是空指针?与初始化功能有关吗?
称呼为:
typedef struct Qnode QNODE;
struct Qnode
{
int length;
QNODE* next;
QNODE* prev;
};
typedef struct lqueue lQUEUE;
struct lqueue
{
QNODE *head;
QNODE *tail;
};
lQueue lqueue_init_default(void)
{
lQUEUE* pQ = NULL;
pQ = (lQUEUE*)malloc(sizeof(lQUEUE));
if (pQ != NULL)
{
pQ->head = NULL;
pQ->tail = NULL;
}
pQ->head = pQ->tail;
return pQ;
}
Status lqueue_henqueue(lQueue* hLQ, int lc)
{
lQUEUE* pLQ = (lQUEUE*)hLQ;
QNODE* new = (QNODE*)malloc(sizeof(QNODE));
if (new == NULL)
{
printf("Couldn't allocate space.\n");
return FAILURE;
}
new->length = lc;
new->next = pLQ->tail->next;
pLQ->tail = new;
return SUCCESS;
}
答案 0 :(得分:0)
您的代码极易出现undefined behavior ...查看此1 1 0
1 1 0
0 1 0
语句:
if
应该应该为此 ...
if (pQ != NULL)
{
pQ->head = NULL; // This pointer is now 'NULL'
pQ->tail = NULL; // This is also 'NULL'
}
这是
if (pQ != NULL)
{
pQ->head = (QNODE*)calloc(1, sizeof(lQUEUE)); // This is proper pointer initialization...
pQ->tail = (QNODE*)calloc(1, sizeof(lQUEUE));
}
应该是这样的:
lQueue lqueue_init_default(void)
您将看到代码工作正常,因为没有未定义的行为 ...
请注意,您可以never access an object that is assigned to NULL ...((仅当您不希望您的程序表现为未定义状态 ...]时),因此:
lQueue * lqueue_init_default(void) // Since you are returning a pointer...
至少不是不安全 ...分配给
pQ->tail = NULL;
的结构化指针通常仅在被销毁后被看到。 > ... 下面是一个示例...
也不相关,但结构具有析构函数,并在不再需要该结构时调用它,否则它将然后泄漏内存 ...
NULL