c/c++语言开发共享即使我使用malloc,C中的fread和fwrite也会出现分段错误

我一直致力于一个程序,由于分段错误而不断崩溃。 我裁掉了导致此问题的最简单的代码部分。 根据我到目前为止所学到的,如果我要求操作系统进行内存分配,然后使用指针读取和写入内存的那个地址,那么应该是好的。

在这种情况下,以下剪切看起来对我来说非常简单:打开一个新文件进行写入,打开源文件,创建outdata以保存足够的字节,从源读取精确的字节值,并使用具有相同参数的fwrite写入新文件。

我有什么基本的东西吗?

 int main (void) { FILE *outimg = fopen("test.jpg", "w"); FILE *rawFile = fopen("source.file", "r"); if(rawFile==NULL) { fprintf(stderr, "Unable to open source filen"); return 1; } int chunkSize = 512; int picChunkCount = 440; unsigned char *outdata = malloc(chunkSize*picChunkCount*sizeof(unsigned char)); if(outdata==NULL) { fprintf(stderr,"Unable to allocate memory for *outdatan"); return 2; } fread(&outdata, sizeof(unsigned char)*chunkSize*picChunkCount,1, rawFile); fwrite(&outdata, sizeof(unsigned char)*chunkSize*picChunkCount, 1, outimg); } 

    只需删除freadfwrite

    那是因为outdata 已经指向了由malloc()分配的位置。

    PS别忘了free(outdata);

    缺少两件事:

    最后,最好一致地分配内存:如果你的文件重20Gb,但只有10Gb RAM可用 – 会发生一些不好的事情。

    试着用这个:

     #include  #include  #define CHUNK 512 int main () { FILE *inputFile; FILE *outputFile; unsigned char *buffer; size_t nread; buffer = malloc(CHUNK); if (!buffer) exit(1); inputFile = fopen("input.txt", "rb"); outputFile = fopen("output.txt", "wb"); if (!inputFile || !outputFile) exit(2); while ((nread = fread(buffer, 1, CHUNK, inputFile)) > 0) fwrite(buffer, 1, nread, outputFile); if (ferror(inputFile) || ferror(outputFile)) exit(3); free(buffer); fclose(inputFile); fclose(outputFile); return 0; } 

      以上就是c/c++开发分享即使我使用malloc,C中的fread和fwrite也会出现分段错误相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519555.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐