strcpy
Valgrind在以下代码中检测到问题:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main () {
char **array;
int mallocedLen = 15;
int arrLen = 10;
char tempArr[20][20] = {"abc", "123", "def", "456", "ghi", "789"};
int ii;
array = (char**)malloc(sizeof(char*) * arrLen);
for(ii = 0; ii < arrLen; ii++){
array[ii] = (char*)malloc(sizeof(char) * (strlen(tempArr[ii]) + 1));
strcpy(tempArr[ii], array[ii]);
array[ii][strlen(tempArr[ii])] = '\0';
mallocedLen++;
}
return 0;
}
==4360== Conditional jump or move depends on uninitialised value(s)
==4360== at 0x483F0A2: strcpy (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
代码似乎编译得很好,所以我认为这不是 mallocing 的问题。