返回0时的C 结构误差
C++ Structure error at Return 0?
相当新,代码输出如下:
1-> 2->退出
但是,程序无法完全执行(即使这是程序的终结,Spooky)
这是代码:
struct ListN{
int value;
ListN* next;
};
int main()
{
struct ListN* newn = (struct ListN*)malloc(sizeof(struct ListN));
newn->value = 1;
struct ListN* temp;
temp = newn;
newn= newn->next;
newn->value = 2;
newn->next = NULL;
while(temp!=NULL){
printf("%d ->",temp->value);
temp = temp->next;
}
printf("exit");
return 0;
}
所有这些都归结为以下序列:
struct ListN* newn = (struct ListN*)malloc(sizeof(struct ListN));
newn->value = 1;
newn= newn->next;
newn->value = 2;
前两个语句创建一个新元素并设置其数据值,但DO 不是将其"下一个元素"指针设置为任何东西。
第三个语句将newn
设置为第一个元素的next
指针中存储的任意值,以及尝试设置其值的第四个授权。
此(删除任意指针)是不确定的行为,纯净而简单。那时,允许任何事情都可以发生。
如果您想构建一个两元素列表,则以下是一种更正确的方法:
struct ListN* newn = (struct ListN*)malloc(sizeof(struct ListN));
newn->value = 1;
newn->next = (struct ListN*)malloc(sizeof(struct ListN));
newn= newn->next;
newn->value = 2;
newn->next = NULL;
尽管您应该真正考虑:
- 您最好使用
new
而不是malloc
在C ;
中会更好 - ,如果您 do 使用
malloc
,则应检查失败;和 - c (从C 11开始)已经在其曲目
forward_list
中具有单一连锁的列表。除非您的意图是学习算法,否则您可能应该只使用。在C 11之前,您可以只使用list
,尽管这是一个双关联列表。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 为什么在浮点中从大到小会引入更多的误差
- 奇怪的结构&GCC&clang(void*返回类型)
- 从C中的结构中检索值时编译误差
- 返回0时的C 结构误差