这个程序会在我的UNIX机器上引起seg fault。我将原因缩小到第二次调用memset()。
为什么会出现这种行为?第一个“块”代码与第二个几乎相同,不是吗?如果第二个调用造成了segfault,那么第一个调用为什么没有?
我查看了其他有关segfaulting memset调用的线程,但它们中没有一个类似于这个问题。
如果你想知道为什么我写了这样一个琐碎的程序,那是因为它是从另一个我正在编写的程序中改编而来的,我正在用它来教自己如何将memcpy()应用于结构体。
为什么会出现这种行为?第一个“块”代码与第二个几乎相同,不是吗?如果第二个调用造成了segfault,那么第一个调用为什么没有?
我查看了其他有关segfaulting memset调用的线程,但它们中没有一个类似于这个问题。
如果你想知道为什么我写了这样一个琐碎的程序,那是因为它是从另一个我正在编写的程序中改编而来的,我正在用它来教自己如何将memcpy()应用于结构体。
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int x;
char text;
} FilesStruct;
int
main(int argc, char** argv)
{
FilesStruct *old_dir;
memset(old_dir,0,sizeof(FilesStruct));
old_dir->x = 3;
old_dir->text = 'c';
printf("old dir: %d,%c\n",old_dir->x,old_dir->text);
FilesStruct *new_dir;
memset(new_dir,0,sizeof(FilesStruct));
new_dir->x = 7;
new_dir->text = 'g';
printf("new dir: %d,%c\n",new_dir->x,new_dir->text);
return 0;
}