我有一个由以下内容动态分配的整数数组:
int *ranArr(int size) {
int *arr= malloc(size *sizeof(int));
for(int i = 0; i < size; i++) {
arr[i] = genRan(size);
}
return arr;
}
我想为一个字符串动态分配内存,我会将整数数组转换成字符串并存储在字符串中:
int *arrayCopy = ranArr(size);
int arrayCopyLen = size;
char *arrayString= (char*) malloc(size * sizeof(char));
int index = 0;
for(int i = 0; i< arrayCopyLen ; i++) {
index += sprintf(&arrayString[index], "%d ,", arrayCopy[i]);
}
int arrayStringLen = strlen(arrayString)+1;
这适用于1000左右的数组大小,但是当我将大小设置为2000左右时,它会中断,我会遇到分段错误。
答案 0 :(得分:2)
您没有为字符串分配足够的内存。
假设int
为32位,将单个int
转换为字符串最多占用12个字节。例如,将值-2000000000转换为字符串需要12个字符。因此,您的字符串至少需要12 * size
个字节,加上", "
个字符和空终止符的空间。
此外,根据定义,sizeof(char)
为1,因此无需乘以。
char *arrayString = malloc(size * 14 + 1);
// 14 = 12 bytes for a 32-bit int plus 2 bytes for ", "