bla*_*all 1 c gcc segmentation-fault
这是代码:
char s[8];
int i = 0;
void **p = &s;
for (; i < 8; ++i) {
putchar( ((char*)(*p))[i] );
}
Run Code Online (Sandbox Code Playgroud)
上面的代码可以工作,但给了一些垃圾字符.所以我做的只是初始化s[8]:
char s[8] = {0};
Run Code Online (Sandbox Code Playgroud)
然后分段错误,但如果我使用VC++编译并运行它,它工作正常.奇怪的.有人可以解释一下吗?谢谢!
更新:很多人说上面的代码是愚蠢的......这个更新适合你.原始代码的样子:
static void*
copy_and_move(void **dst, int dsz, const void **src, int ssz) {
const int sz = ssz > dsz ? dsz : ssz;
memcpy(*dst, *src, sz);
return *dst + sz;
}
Run Code Online (Sandbox Code Playgroud)
然后是主叫代码:
char d[10], s[8];
copy_and_move(&d, sizeof(char) * 10, &s, sizeof(char) * 8);
Run Code Online (Sandbox Code Playgroud)
让我们来看看:
void **p = &s;
Run Code Online (Sandbox Code Playgroud)
在那里,p指向s,也就是说,它包含第一个字节的地址s.
它是一个指向指针的指针,因此*p被读作指针,它将使用前n个字节s,其中n等于sizeof(void*)(4或8).
然后你使用该指针*p读取内存字节...
现在,哪些字节在内存s中将被读取为内存地址?
{0],则它们将全为零,因此*p将是NULL指针和段错误.| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |