Closed. This question is off-topic. It is not currently accepting answers. Learn more
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
去年关门了。
作为一个C语言的初学者,我仍然对神奇的“指针”这个概念感到困惑
例如,它是一个简单的代码,在数组“range1”中存储1到10个
int *range1;
int max = 10;
int count = 0;
range1 = malloc(sizeof(int) * (11));
while (count < max)
{
    range1[count] = count;
    count++;
}
range1[count] = '\0';

这很有效,但是
int *range1;
int max = 10;
int count = 0;
range1 = malloc(sizeof(int) * (11));
while (count < max)
{
    *range1 = count;
    count++;
    range1++;
}
range1[count] = '\0';

这个不是。我明白了
[1]    24934 segmentation fault

我很困惑,因为我想*(range1+count)=range1[count]。
如何更改第二个示例,使其在运行时不产生分段冲突。

最佳答案

使用

range1++;

除非有另一个变量存储malloc返回的值,否则不建议使用。如果没有这样的变量,就会丢失原始指针呼叫free将是一个问题。
另外,如果你继续使用
range1[11] = '\0';

循环之后,您将访问和修改内存中不应访问的位置。这会导致未定义的行为。
聚苯乙烯
使用
range1[11] = '\0';

即使使用第一种访问range1元素的方法,也是一个问题。当分配11个元素时,10是最高的有效索引。

10-08 03:46