該程序在我的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
感謝您的幫助! –