有人可以告诉我为什么第一个程序崩溃,但第二个程序没有崩溃?第一个(崩溃):
#include <cstdlib>
class test
{
public:
test(const char *cstr)
{
size_t j=0;
while(cstr[n++])
;
//n = j;
}
private:
size_t n;
};
int main()
{
test("Hello, world!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第二个不会崩溃(使用构造函数的本地变量而不是数据成员来计算):
#include <cstdlib>
class test
{
public:
test(const char *cstr)
{
size_t j=0;
while(cstr[j++])
;
n = j;
}
private:
size_t n;
};
int main()
{
test("Hello, world!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Windows上运行MinGW.make:* [run]错误-1073741819
很简单,因为在你的第一个例子中构造函数n在它n被初始化之前使用(实际上,永远不会被初始化).
所以行
while(cstr[n++])
Run Code Online (Sandbox Code Playgroud)
是未定义的行为.
尝试:
test(const char *cstr) : n(0) // <-- initialize n
{
size_t j=0;
while(cstr[n++])
;
//j = n;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |