声明简单结构:
struct s {
char* addr;
};
s *ips;
现在分配那个struct array memory
num = 5
ips = (r *) malloc(num * sizeof(r));
我知道malloc只是分配内存,而不是初始化,可能有垃圾值。
现在我想知道我是不是初始化一个,并尝试访问会发生什么?
//Init for 4 of them
for(int i = 0; i < num-1; i++)
ips[i].addr = strdup("123");
//Accessing un-initialize one:
if(ips[4].addr) {
printf("Accessing uninitialize one and lets say freeing!!!");
free(ips[4].addr);
}
理想不应该进入这个for循环。但后来我认为因为垃圾价值可能会。我不确定!
答案 0 :(得分:1)
将会发生什么事情是不可预测的,因为你无法知道所包含的内存。在调用calloc
后,您应该使用malloc
代替memset
或malloc
内存。
我个人更喜欢使用calloc
,因为它会保存一行代码并使以后更容易阅读代码。
答案 1 :(得分:0)
初始化变量。
没有初始化 - 所有赌注都关闭
{em>知道的ips[4].addr
未初始化。所以使用:
// Various code
...
if(ips[4].addr) {
是一种简单的方式,简单地询问以下内容是做什么的?
int i;
if (i) {
每次运行程序时,i
的值都可能相同。如果可能不同。没有理想应该发生什么。这是简单的未定义行为(UB)。