【问题标题】:Malloc string and edit itMalloc 字符串并对其进行编辑
【发布时间】:2011-04-19 19:58:30
【问题描述】:

我在这里创建了一些 malloc 空间和一个 2 个动态数组。

它有颜色缓冲区[0 到 256][0 到 4]。 然后我读取了一个 bmp 文件并将颜色放入其中。

现在我想更改颜色设置,但这不起作用

像颜色缓冲区[0][0] = "255"

现在第一个颜色的红色值应该是 255

然后我的程序关闭了。 也喜欢 colorbuffer[233][2] = "23" 颜色 233 绿色的值现在应该是 23。

我也不能像这样打印出来 printf("颜色敏感%d", colorbuffer[0][1]);

源中的一些段落 -> http://pastebin.com/fRD5w1XC

希望你能帮助我会很棒谢谢你

edit // 失败是 & 对 &colorbuffer 的读写! 谢谢stackoverflow!

【问题讨论】:

    标签: c string malloc


    【解决方案1】:

    改变

    fread(&colorbuffer[i] //With &
    

    进入

    fread(colorbuffer[i] //No &
    

    当前程序正在覆盖你的colorbuffer表,并因此导致各种麻烦。

    【讨论】:

    • 原来你有不止一个错误!。检查 Ansi 的答案,了解更改 & 后为什么会出现段错误
    【解决方案2】:

    您应该在这里迭代到 256 而不是 4:

      for (i=0;i<256;i++) //original code *for (i=0;i<4;i++)*
      {
      colorbuffer[i]=malloc(4*sizeof(unsigned char)); // colorbuffer[256][4]
      }
    

    编译器应该给你一个警告如果你想编译类似的东西:

    colorbuffer[0][0] = "255"
    

    因为 colorbuffer[0][0] 是 char 而不是 指向 char 的指针。

      for(i=0; i < ( (int)Datenheader.colors - 1 ); i++)
      {
      fread(&colorbuffer[i], sizeof(unsigned char),4,fp);
      wo = ftell(fp);
      }
    

    我猜你不需要从总颜色计数中减去 -1(例如,如果你有 256 种颜色,你将只从文件中读取 255 种颜色。这意味着第 256 种颜色,在数组 colorbuffer[255 ] 根本不会被初始化)

    当然还有另一个 missingno 向您报告的关于 fread 中 & 用法的错误。

    【讨论】:

    • "colorbuffer[0][0] 是 char 不是指向 char 的指针。"那我怎么把then变成30颜色的红色值到200?所以我的意思是 colorbuffer[30][0] = 200 ? ...
    • 太棒了,我发现了这个错误......这是@missingno 的意思!我用它来读写&。现在我删除了它,它可以工作了!!
    • @Mysterigs:很酷,但实际上您发布给我们的代码中有 4 个错误。
    【解决方案3】:

    我的 C 时代已经一去不复返了,但是......

    void* buffer = malloc( sizeof(uchar) * numOfColors * 4 );
    
    uchar** colors = (uchar**)buffer;
    
    colors[0][1] = 1;
    
    free( buffer );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      相关资源
      最近更新 更多