该程序在我的UNIX计算机上导致seg错误。我将原因缩小到调用memset()的秒。调用memset导致分段错误
为什么会发生这种情况?第一个“代码块”与第二个代码块几乎相同,不是吗?为什么没有第一个调用memset段错误,如果第二个呢?
我查看了关于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;
}
哦,我正打算使用的memset作为初始化器,你猜我是非常错误。 所以我的声明只声明一个指针,而不是底层结构;因此,我需要在memsetting之前分配内存到0? –
@Noob是的,这就是 – simonc
感谢您的帮助! –