前言
博主在刷Leetcode的时候经常头疼的是数组初始化问题。尤其是最近,经常会遇到数组访问溢出的问题。
大意就是说访问数组下标越界了,简直头疼得不得了。
今天就结合例子来总结一下:
假如我们这样的话:
(注意看malloc那一行代码)
char * generateTheString(int n){
//if(n == 0) return ;
//第一种初始化方法
//char* res = malloc((n+1) * sizeof(char));
//memset(res , 0 , (n+1) * sizeof(char));
char* res = malloc(n * sizeof(char));
memset(res, 0, n * sizeof(char));
//第二种初始化方法,会报错数组访问内存溢出
//char *res = (char*)calloc(n+1, sizeof(char));
//char res[n];
int i = 0;
if(n%2 == 0){
while(i<n-1){
res[i++] = 'a';
}
res[n-1] = 'b';
}else{
while(i < n){
res[i++] = 'a';
}
}
return res;
}
使用这样初始化res数组:
char* res = malloc(n * sizeof(char));
memset(res, 0, n * sizeof(char));
结果就是:一片红,系统提示数组访问溢出。
。
。
。
但是,如果改为这样的话:
char* res = malloc((n+1) * sizeof(char));
memset(res , 0 , (n+1) * sizeof(char));
也就是全部代码为:
char * generateTheString(int n){
//if(n == 0) return ;
//第一种初始化方法
char* res = malloc((n+1) * sizeof(char));
memset(res , 0 , (n+1) * sizeof(char));
//char* res = malloc(n * sizeof(char));
//memset(res, 0, n * sizeof(char));
//第二种初始化方法,会报错数组访问内存溢出
//char *res = (char*)calloc(n+1, sizeof(char));
//char res[n];
int i = 0;
if(n%2 == 0){
while(i<n-1){
res[i++] = 'a';
}
res[n-1] = 'b';
}else{
while(i < n){
res[i++] = 'a';
}
}
return res;
}
结果就是:
真是百思不得其解!!!!
讲道理,是不需要为‘\0’预留空间的,但是为什么呢?
如果有知道的朋友欢迎指点!