C 我的代码有什么问题?程序只是在没有错误语句的情况下终止 #包括 结构 { 国际信息; }; typedef结构*ts; int main() { ts-exp; exp->info=10; printf(“工作”); }
我不知道这段代码有什么问题。不会打印错误语句以查找解决方案。程序刚刚终止。将指针隐藏在C 我的代码有什么问题?程序只是在没有错误语句的情况下终止 #包括 结构 { 国际信息; }; typedef结构*ts; int main() { ts-exp; exp->info=10; printf(“工作”); },c,pointers,structure,C,Pointers,Structure,我不知道这段代码有什么问题。不会打印错误语句以查找解决方案。程序刚刚终止。将指针隐藏在typedef后面,并且仍然将其用作指针是一个愚蠢的想法 没有错误消息,因为您的程序在语义上是正确的,没有任何编译时错误。然而,这并不意味着也没有 typedef仅为现有类型创建别名,因此 #include<stdio.h> struct stucture { int info; }; typedef struct stucture * ts; int main() { ts exp
typedef
后面,并且仍然将其用作指针是一个愚蠢的想法
没有错误消息,因为您的程序在语义上是正确的,没有任何编译时错误。然而,这并不意味着也没有
typedef
仅为现有类型创建别名,因此
#include<stdio.h>
struct stucture
{
int info;
};
typedef struct stucture * ts;
int main()
{
ts exp;
exp->info=10;
printf("working");
}
绝对没有区别
ts exp;
现在看起来更清楚了。有了这句话,你希望exp
指向哪里
被单位化后,它实际上可以指向内存中的任何地方,因此访问它肯定是一种选择。在尝试访问之前,您必须至少为其指定一个要指向的有效地址:
struct structure *exp;
或使用动态分配:
struct structure x;
exp = &x;
不要忘记最后一个
free()
语句,否则您将遇到另一个问题:内存泄漏。指针指向无效内容。您可以这样做以获得有效的结果
exp = malloc(sizeof(*exp));
if (exp == NULL) {
fputs("Failed to allocate memory", stderr);
exit(1);
}
// Do stuff
free(exp);
现在,在您的程序之前,您访问了一些不确定的内存位置,程序崩溃(未定义的行为)
或者,您可以动态分配内存以获得有效的结果
struct structure ab;
ts exp = &ab;
使用malloc
动态分配内存时,必须释放内存
那么出了什么问题?。。。
指针变量应该存储地址。现在,ts
实际上表示一个struct结构*
那里面装的是谁的地址<代码>结构结构的地址
最初exp
包含一些不确定的值。你甚至不知道它是否是一个有效的地址,或者它是否被允许访问它。您试图访问它-这是未定义的行为
在这儿等你
ts exp = malloc(sizeof *exp);
if ( exp == NULL ) {
fprintf(stderr, "Error in allocation");
exit(1);
}
...
//do cool stuff with exp
...
free(exp);
您基本上是让exp
指向ab
的地址。现在,当您取消引用它时,您将访问一个有效的内存位置并对其进行更改
在这里,您还错误地解释了您在typedef下隐藏了一个指针 如果你这么做了
struct structure ab;
ts exp = &ab;
如果你做了这样的事
typedef struct structure ts;
这是有道理的
关键的收获是:-
- 不要将指针隐藏在
中,这会增加管理程序的难度typedef
- 使用更好的命名
不是一个好名字struct structure
- 到底是什么
- 如何使用
malloc
exp->info
对您来说可能会更加可疑。您没有为指针exp
分配内存。在分配之前,您不能存储。首先使用malloc
进行分配,然后初始化变量。我更喜欢将sizeof
之后的任何内容用括号括起来。@iBug:不需要。这也行得通。是的,你可以做到。@DavidC.Rankin抱歉,我不太懂“今晚”。我在中国,现在是15:35(格林尼治标准时间+8)更正——今天(同一个后记)。
ts exp
exp.info = 10;