使用指针/数组差异分配值

0 c arrays pointers

作为C的初学者,我仍然对魔法"指针"的概念感到困惑

例如,它是一个简单的代码,在数组"range1"中存储一到十个

int *range1;
int max = 10;
int count = 0;
range1 = malloc(sizeof(int) * (11));
while (count < max)
{
    range1[count] = count;
    count++;
}
range1[count] = '\0';
Run Code Online (Sandbox Code Playgroud)

这很有效,但是

int *range1;
int max = 10;
int count = 0;
range1 = malloc(sizeof(int) * (11));
while (count < max)
{
    *range1 = count;
    count++;
    range1++;
} 
range1[count] = '\0';
Run Code Online (Sandbox Code Playgroud)

这个不是.我明白了

[1]    24934 segmentation fault
Run Code Online (Sandbox Code Playgroud)

我很困惑因为我认为*(range1 + count)= range1 [count].

如何更改第二个示例,使其运行而不会产生分段违例.

R S*_*ahu 7

用于

range1++;
Run Code Online (Sandbox Code Playgroud)

除非您有另一个存储返回值的变量,否则不建议使用malloc.如果没有这样的变量,就会丢失原始指针.打电话free会有问题.

另外,如果你继续使用

range1[11] = '\0';
Run Code Online (Sandbox Code Playgroud)

在循环之后,您正在访问和修改内存中您不应该的位置.这会导致未定义的行为.

PS

用于

range1[11] = '\0';
Run Code Online (Sandbox Code Playgroud)

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