1
int a=3,*p=&a;
p++;
*p=10;
然后它给出了分段错误。
2
int a[3]={1,2,3};
a[10]=10;
然后它正常工作
答案 0 :(得分:5)
两个代码段均显示Undefined Behavior。
在两个代码段中,您都会写入调用Undefined Behavior的无效内存位置。当你这样做时,任何事情都可能发生。它不一定是段错误或崩溃。它可能会工作一次,但是下次再执行时会失败。
答案 1 :(得分:2)
两个代码段都可能导致未定义的行为。
对于第一个,
var rx = new Regex(@"(?<!\([^)]*)\s+(?![^(]*\))");
var txt = @"YOUR TEXT";
var reslt = rx.Split(txt);
您已为int a分配内存,假设其为4个字节。然后'p'指向'a'的起始地址。当你执行'p ++'时,因为'p'是int *类型,所以它的大小增加为int。 '* p'指向未分配的位置(int大小的地址)。因此它会出现分段错误。
假设int的大小为4,那么你的分配几乎就是这样(这里没有考虑endianess)。
int a=3,*p=&a;
p++;
*p=10;
当你做p ++时,p指向第一个字节。
在第二种情况下,你很幸运,它没有给出seg错误。您只分配了(3 *大小的int)字节的内存并尝试访问未分配的[10]。它可能会给您一个分段错误或将返回任何垃圾值。