#include<stdio.h>
#include<string.h>
#define USER_MEM (10*1024)
typedef struct {
unsigned short int vol_level;
int mute_stat;
}audio_state;
static audio_state aud_stat;
static unsigned char user_mem[USER_MEM];
void aud_read(unsigned char * data)
{
unsigned short pos =0;
memcpy(data,&user_mem[pos],sizeof(data));
printf("The Read data is:%c",*data);
}
void aud_write(unsigned char * data)
{
unsigned short pos =0;
memcpy(&user_mem[pos],data,sizeof(user_mem[pos]));
printf("The written data is:%s",*data);
}
int main()
{
aud_stat.vol_level=10;
aud_stat.mute_stat=20;
aud_write((unsigned char*)&aud_stat);
aud_read((unsigned char*)&aud_stat);
}
このプログラムはセグメンテーションフォールトを投げています。私はいくつかのバイトのデータを読むだけでなく、いくつかのバイトのデータを書きたいと思っていました。私は上記のコードを書いたが、seg faultとしてエラーを投げている。この問題を解決するのを手伝ってください。memcpy()中のsegフォルト
EDITED
#include<stdio.h>
#include<string.h>
#define USER_MEM (10*1024)
typedef struct {
unsigned short int vol_level;
int mute_stat;
}audio_state;
static audio_state aud_stat;
static unsigned char user_mem[USER_MEM];
void read(unsigned char * data,unsigned short num)
{
printf("Into Read!\n");
unsigned short pos =0;
memcpy(data,&user_mem[pos],num);
printf("The Read data is:%c",*data);
}
void write(unsigned char * data,unsigned short num)
{
printf("Into Write!\n");
unsigned short pos =0;
memcpy(&user_mem[pos],data,num);
printf("The written data is:%c",*data);
}
int main()
{
aud_stat.vol_level=10;
aud_stat.mute_stat=20;
write((unsigned char*)&aud_stat,sizeof(audio_state));
read((unsigned char*)&aud_stat,sizeof(audio_state));
}
出力:あなたはsizeof(data)
を使用することはできませんAIUP_read
で
を学ぶための痛々しいほど遅い方法が起こっているあなたは、デバッガを通してそれを実行したのを? 'memcpy'に与えられたポインタが有効であることを確認しましたか? –
私はcodepadを使用しています。私はCソフトウェアをインストールしていません。 – Angus
@Angus:1つ手に入れることをお勧めします。 – leppie