当前位置: 技术问答>linux和unix
一个简单的GCC编译问题
来源: 互联网 发布时间:2015-09-22
本文导语: #include #include #include struct nodeType { char *rarVal; struct nodeType *nextNode; }; // typedef struct nodeType NodeType; int main() { nodeType *node; // node = (nodeType *)malloc(sizeof(nodeType)); // node->rarVal = (char *)malloc(20); // s...
#include
#include
#include
struct nodeType
{
char *rarVal;
struct nodeType *nextNode;
};
// typedef struct nodeType NodeType;
int main()
{
nodeType *node;
// node = (nodeType *)malloc(sizeof(nodeType));
// node->rarVal = (char *)malloc(20);
// strcpy(node->rarVal, "test");
// node->nextNode = NULL;
// ...
// free(node->rarVal);
// free(nodeType);
}
这段代码为什么GCC编译通不过啊,就这么几句,不晓得还有什么问题我把main里面的第一句去掉就没事,难道是结构问题?
#include
#include
struct nodeType
{
char *rarVal;
struct nodeType *nextNode;
};
// typedef struct nodeType NodeType;
int main()
{
nodeType *node;
// node = (nodeType *)malloc(sizeof(nodeType));
// node->rarVal = (char *)malloc(20);
// strcpy(node->rarVal, "test");
// node->nextNode = NULL;
// ...
// free(node->rarVal);
// free(nodeType);
}
这段代码为什么GCC编译通不过啊,就这么几句,不晓得还有什么问题我把main里面的第一句去掉就没事,难道是结构问题?
|
确实是main第一句有问题:
应该把nodeType *node;该为NodeType *node;
因为你的typedef struct nodeType NodeType;这句代码把struct nodeType的数据结构类型
等价与NodeType;即struct nodeType=NodeType。
要不:
你把typedef struct nodeType NodeType;删了,
main第一句直接该为:struct nodeType *node;
数据结构里关于typedef那部分说的挺明白的
应该把nodeType *node;该为NodeType *node;
因为你的typedef struct nodeType NodeType;这句代码把struct nodeType的数据结构类型
等价与NodeType;即struct nodeType=NodeType。
要不:
你把typedef struct nodeType NodeType;删了,
main第一句直接该为:struct nodeType *node;
数据结构里关于typedef那部分说的挺明白的
|
#include
#include
#include
struct nodeType
{
char *rarVal;
struct nodeType *nextNode;
};
typedef struct nodeType NodeType;
int main()
{
NodeType *node;
node = (nodeType *)malloc(sizeof(nodeType));
node->rarVal = (char *)malloc(20);
strcpy(node->rarVal, "test");
node->nextNode = NULL;
free(node->rarVal);
free(nodeType);
}
这样试试啦
我没有帮你去试了,上面的仁兄们也讲过了
#include
#include
struct nodeType
{
char *rarVal;
struct nodeType *nextNode;
};
typedef struct nodeType NodeType;
int main()
{
NodeType *node;
node = (nodeType *)malloc(sizeof(nodeType));
node->rarVal = (char *)malloc(20);
strcpy(node->rarVal, "test");
node->nextNode = NULL;
free(node->rarVal);
free(nodeType);
}
这样试试啦
我没有帮你去试了,上面的仁兄们也讲过了
|
#include
#include
#include
struct nodeType
{
char *rarVal;
struct nodeType *nextNode;
};
int main()
{
struct nodeType *node;
node = (struct nodeType *)malloc(sizeof(struct nodeType));
node->rarVal = (char *)malloc(20);
strcpy(node->rarVal, "test");
free(node->rarVal);
free(node); // 应该是node,不是nodeType
}
#include
#include
struct nodeType
{
char *rarVal;
struct nodeType *nextNode;
};
int main()
{
struct nodeType *node;
node = (struct nodeType *)malloc(sizeof(struct nodeType));
node->rarVal = (char *)malloc(20);
strcpy(node->rarVal, "test");
free(node->rarVal);
free(node); // 应该是node,不是nodeType
}
|
node = (nodeType *)malloc(sizeof(nodeType));不是已经为结构申请空间了吗?为什么还要单独再为node->rarVal = (char *)malloc(20);申请空间?
你可以看一下sizeof(nodeType)的大小,rarVal在其中占据的是一个四个字节长的,就是说还是一个指针的长度,node = (nodeType *)malloc(sizeof(nodeType));你申请的空间中rarVal占的仍然是一个指针的长度,就是四个字节,你要给他单独申请一下,才能当作数组用(我说的不好,表达能力差了点,你对付这看吧)
你可以看一下sizeof(nodeType)的大小,rarVal在其中占据的是一个四个字节长的,就是说还是一个指针的长度,node = (nodeType *)malloc(sizeof(nodeType));你申请的空间中rarVal占的仍然是一个指针的长度,就是四个字节,你要给他单独申请一下,才能当作数组用(我说的不好,表达能力差了点,你对付这看吧)
|
nodeType *node;这句话有问题(改成NodeType *node;)
还有你的编译命令是不是对的?
(gcc 原文件.c -o 目标文件)
还有你的编译命令是不是对的?
(gcc 原文件.c -o 目标文件)
|
main 的第一句是struct nodeType *node;吧
|
把main里面得 nodeType *node;语句改为
struct nodeType *node;吧!
struct nodeType *node;吧!