第一次使用Malloc,程序崩溃
该计划旨在接收n个学生及其姓名,并对其进行排序 (还没有到分拣部分)。 我无法理解为什么我的程序在测试时会崩溃。 代码如下:第一次使用Malloc,程序崩溃,c,malloc,C,Malloc,该计划旨在接收n个学生及其姓名,并对其进行排序 (还没有到分拣部分)。 我无法理解为什么我的程序在测试时会崩溃。 代码如下: #include<stdio.h> #include <stdlib.h> #define MaxNameLen 100 int main() { int n; scanf("%d", &n); char *names; char **pointerToNames = (char **) malloc(n
#include<stdio.h>
#include <stdlib.h>
#define MaxNameLen 100
int main() {
int n;
scanf("%d", &n);
char *names;
char **pointerToNames = (char **) malloc(n * sizeof(char));
if (pointerToNames == NULL)
return 0;
int i;
for (i = 0; i <= n; i++) {
names = (char *) malloc(MaxNameLen);
gets(names);
pointerToNames[i] = names;
}
for (i = 0; i < n; i++) {
free(pointerToNames[i]);
free(names);
}
}
#包括
#包括
#定义MaxNameLen 100
int main(){
int n;
scanf(“%d”和“&n”);
字符*名称;
char**pointerToNames=(char**)malloc(n*sizeof(char));
if(pointerToNames==NULL)
返回0;
int i;
对于(i=0;i您有三个问题。第一个问题是您没有为“数组”分配足够的条目:
应该是
malloc(n * sizeof(char*))
第二个问题是读取循环:
for (i = 0; i <= n; i++) {
for(i=0;i您有三个问题。第一个问题是您没有为“数组”分配足够的条目:
应该是
malloc(n * sizeof(char*))
第二个问题是读取循环:
for (i = 0; i <= n; i++) {
for(i=0;i您的第一个malloc
旨在为N
指向字符的指针分配内存,但您正在分配N
字符,这可能是更少的内存
更改此行:
char **pointerToNames = (char **) malloc(n * sizeof(char));
为此:
char **pointerToNames = malloc(n * sizeof(*pointerToNames));
此外:
for (i = 0; i < n; i++) {
free(pointerToNames[i]);
free(names);
因此不再使用名称
,而是使用fgets()
。请注意,
的循环从0
到N-1
,而不是N
pointerToNames[N]
不是有效的数组元素。您的第一个malloc
旨在为指向字符的N
指针分配内存,但您正在分配N
字符,这可能是更少的内存
更改此行:
char **pointerToNames = (char **) malloc(n * sizeof(char));
为此:
char **pointerToNames = malloc(n * sizeof(*pointerToNames));
此外:
for (i = 0; i < n; i++) {
free(pointerToNames[i]);
free(names);
因此不再使用名称
,而是使用fgets()
。请注意,
的循环从0
到N-1
,而不是N
pointerToNames[N]
不是有效的数组元素。@haccks@Inisheer;抱歉!获取
现在在C中成为历史。@haccks@Inisheer;抱歉!获取
现在在C中成为历史。