Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正确使用malloc和strcat避免valgrind的内存错误_C_Valgrind - Fatal编程技术网

正确使用malloc和strcat避免valgrind的内存错误

正确使用malloc和strcat避免valgrind的内存错误,c,valgrind,C,Valgrind,我已将顶点存储在tempStorage中: typedef struct { int pred[8]; int succ[8]; } arc_set; arc_set tempStorage; 例如.pred为0,1,1,2,2,.succ为2,2,3,3,1 我做了一个char*links=malloc(sizeof(char)*100)存储这些数字并按如下方式打印: char *temp = malloc(10); for

我已将顶点存储在tempStorage中:

typedef struct {
    int pred[8];
    int succ[8];
} arc_set;

arc_set tempStorage;
例如.pred为0,1,1,2,2,.succ为2,2,3,3,1

我做了一个
char*links=malloc(sizeof(char)*100)
存储这些数字并按如下方式打印:

            char *temp = malloc(10);

            for (int l = 0; l < 8; l++){

                    sprintf(temp, "%d-%d ", tempStorage.pred[l], tempStorage.succ[l]);
                    strcat(links, temp);

            }
            free(temp);

            fprintf(stdout, "Solution %d edges: %s",countLinks, links);
            fprintf(stdout, "\n");
其中c:251为
strcat(链路、温度)和c:225是我的
char*links=malloc(sizeof(char)*100)


我是不是用错了strcat或者这里有什么问题

默认情况下,从
malloc
获得的内存不是零初始化的。并且
strcat
会将新的字符串追加到字符串的末尾。对于非零初始化的内存块,它可以位于任何位置


您不需要将整个
链接设置为零——只要第一个字节就足够了。仍然
memset(links,01100)紧跟在
malloc
之后不会受伤

使用
calloc
如何?除了在开始for循环之前确保
links[]
的第一个八位字节为零之外,对
temp
的动态管理毫无意义<代码>字符温度[10]就足够了。并认真考虑这是否是一个切实可行的解决办法。为什么是100?因为99不够,101太多了?如果cap是一个真正的未知代码,那么您的代码应该为此做好准备,而不是假设并希望是最好的。
Conditional jump or move depends on uninitialised value(s)
==12322==    at 0x4C2C66A: strcat (vg_replace_strmem.c:307)
==12322==    by 0x4013CC: main (program.c:251)
==12322==  Uninitialised value was created by a heap allocation
==12322==    at 0x4C29BC3: malloc (vg_replace_malloc.c:299)
==12322==    by 0x401270: main (program.c:225)