Closed. This question is off-topic. It is not currently accepting answers. Learn more。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
去年关门了。
作为一个C语言的初学者,我仍然对神奇的“指针”这个概念感到困惑
例如,它是一个简单的代码,在数组“range1”中存储1到10个
这很有效,但是
这个不是。我明白了
我很困惑,因为我想*(range1+count)=range1[count]。
如何更改第二个示例,使其在运行时不产生分段冲突。
除非有另一个变量存储
另外,如果你继续使用
循环之后,您将访问和修改内存中不应访问的位置。这会导致未定义的行为。
聚苯乙烯
使用
即使使用第一种访问
想改进这个问题吗?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