2017-01-08 80 views
0

我想知道为什么我的配置工作。我创建了ptr这是一个指针,并且ptr2指向与ptr相同的位置。malloc触摸未分配的内存

这里是我的代码:

int* ptr = malloc(sizeof(int)); 
int* ptr2 = ptr; 
*ptr2 = 1; 
ptr2 = ptr+1; 
*ptr2 = 2; 

在结束我有两个整的像一个数组:

ptr[0] = 1 
ptr[1] = 2 

我的问题是:为什么我的价值2影响到ptr2无错误或警告?我只有malloc() -ed对于我的数组中的一个整数位置,不是吗?

+2

未定义的行为是* undefined *。 – EOF

+1

可能重复的[没有越界错误](http://stackoverflow.com/questions/9137157/no-out-of-bounds-error) – EOF

+0

[正在访问一个全局数组超出其约束未定义的行为? ](http://stackoverflow.com/questions/26426910/is-accessing-a-global-array-outside-its-bound-undefined-behavior) –

回答

4

这里的问题是,说

ptr2 = ptr+1; 

你指向了绑定的内存。接下来,您将调用undefined behavior。现在,UB的结果无论如何都是不合理的。

C中没有任何固有的东西可以阻止你访问出界(或无效)内存,但这样做的结果是UB。

这就是说,只是一个建议,你应该总是使用指针,以避免UB提领NULL指针,在malloc()失败的情况下前检查的malloc()返回值。

+0

感谢您的回答。所以如果我想让它变得更好,我可以使用像'realloc'这样的东西? –

+0

@CallisteHanriat这是正确的路要走。 –