作为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].
如何更改第二个示例,使其运行而不会产生分段违例.
用于
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是最高有效索引.