我遇到了一个奇怪的问题,我在一年前制作了一个宏,它每个月都在使用而没有任何问题.昨天我的老板告诉我,他不能再使用它,它给了他一些错误.我现在在8台计算机上尝试了宏,宏运行得很好.为什么宏会在其他人的计算机上运行,除了我的老板.
它打破的线
Windows("MyxlsbFile").Activate
Run Code Online (Sandbox Code Playgroud)
并且给出的错误是
运行时错误'9':下标超出范围.
我有两个结构
struct obj_t {
int id;
float x;
float y;
};
struct cluster_t {
int size;
int capacity;
struct obj_t *obj;
};
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,有指向第一obj_t内部cluster_t
我想要做的是从 cluster_t 内的数组中释放每个 obj_t
我必须用这样的for循环来写吗?
void clear_cluster(struct cluster_t *c)
{
for(int i = 0; i<c->size;i++)
{
free(&c->obj[i]);
}
free(c->obj);
}
Run Code Online (Sandbox Code Playgroud)
或者像这样释放内存可以吗?
void clear_cluster(struct cluster_t *c)
{
free(c->obj);
}
Run Code Online (Sandbox Code Playgroud) 我已经在头文件中定义了结构
\n\ntypedef struct tDLElem { \n int data; \n struct tDLElem *lptr; \n struct tDLElem *rptr; \n} *tDLElemPtr;\n\ntypedef struct { \n tDLElemPtr First;\n tDLElemPtr Act; \n tDLElemPtr Last;\n} tDLList;\nRun Code Online (Sandbox Code Playgroud)\n\n我有这个代码
\n\nvoid DLInsertFirst (tDLList *L, int val) {\n tDLElemPtr *newPtr = (tDLElemPtr *) malloc(sizeof(struct tDLElem));\n if (newPtr == NULL)\n DLError();\n newPtr->lptr = NULL;\n newPtr->rptr = L->First;\n newPtr->data = val;\n if (L->First != NULL)\n {\n L->First->lptr = newPtr;\n }\n else\n {\n L->Last = newPtr;\n }\n L->First = newPtr;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n …