任何人帮我解决分段错误

时间:2012-12-12 15:26:14

标签: c steganography

我的解码器出现问题,想知道是否有人可以帮助我?

基本上,我正在尝试为我的隐写编码器构建解码器,编码器在声音文件中的每个字节的LSB上放置一个消息

解码器作业是收集这些位并从中创建新消息

代码意味着执行以下操作:

  

代码:全部选择

     
      
  • 转到消息数组位置。

  •   
  • 将bitindex设置为0,增量为7 //(8位到一个字节)

  •   
  • 转到声音阵列位置

  •   
  • 如果soundbit相等则将0添加到新字节,否则添加1到结尾   新字节

  •   
  • 执行bitshift一次

  •   
  • 增加bitindex

  •   

通过使用各种printf,我可以告诉你它在崩溃前平稳运行3/4次。

希望有意义的实际循环看起来像这样:

 {


int mIndex, sIndex, bitIndex, mask;
char *message[9];

mask = 1;
mIndex = 0;


unsigned char *soundFile = LoadWavAudioFile("boomedit.wav");

int soundFileSize = GetSizeOfWavFile();



bitIndex = 0;

    for(mIndex = 0; mIndex < 8; mIndex++)//index for message
    {
        printf("1\n");
        for(sIndex = 0; sIndex < soundFileSize; sIndex++)//index for soundfile
        {
            printf("2\n");
            for(bitIndex = 0; bitIndex < 8;)
            {
                printf("3\n");
                int test;
                if((soundFile[sIndex] & mask) > 0)//is message bit > 0
                {                                   
                    printf("++++++++++++++++\n");
                    *message[mIndex] = (soundFile[sIndex] | 1);//adds a one to message byte
                    *message[mIndex] = *message[mIndex] <<1;    //shift bits 1 placce left
                    printf("*****************\n");

                }
                else
                { //no change the LSB to 0
                    printf("------------------\n");
                    *message[mIndex]= soundFile[sIndex] & 254; //adds a zero at end o
                    *message[mIndex] = *message[mIndex] <<1; //shifts bits 1 place to left
                    printf("******************\n");
                }

                bitIndex++;
            }   
        }
    }

printf("\n hiddden letters:%s\n", *message); //print message    
printf("\nalert 5\n");

}

希望有助于任何事情有所帮助。

2 个答案:

答案 0 :(得分:1)

问题在于:

char *message[9];

你已经创建了一个包含9个字符指针的数组,你没有为它们分配任何值或者为它们分配任何内存。他们没有初始化。

你现在要做的第一件事就是尊重其中一条未初始化的指针:

*message[mIndex] =

因此你崩溃了。


编辑:

您可以通过以下方式将其初始化为所有NULL

char *message[9] = {0};

但你还是不能使用它,不会只是在引用NULL指针时出错。您必须为这些内容分配一些内存才有用..例如,您可以这样做:

message[0] = malloc(100); // I don't know how much you need for your strings
message[1] = malloc(100); // that's up to you, so I'm just arbitrally picking 100 bytes
message[2] = malloc(100); // here to illustrate the point.
message[3] = malloc(100);
message[4] = malloc(100);
message[5] = malloc(100);
message[6] = malloc(100);
message[7] = malloc(100);
message[8] = malloc(100); 

然后,当你完成后,你将不得不释放它们。这是想要你想要的吗?一串字符串?

这一行:

printf("\n hiddden letters:%s\n", *message); //print message 

对我来说意味着你真的只追求一个字符串......

答案 1 :(得分:0)

在您发布的代码中,当您转到第一个sIndex语句时,soundFileSize将等于if。从这里看,就像你正在阅读一个超过数组结尾的soundFile。 (假设数组的大小实际上是soundFileSize