c-为什么malloc在长argv参数后会产生错误



我写了一个程序,它从命令行参数中读取一些文件名和一个单词。第一个参数将是一个单词,剩下的将是文件名。它填充了我定义的结构。然而,对于小参数,程序可以正常工作,但对于大参数,malloc会给出损坏的最大大小错误。

以下只是程序的初始代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILENAME_LIM 256
#define WORD_LIM 256
struct data {
char filename[FILENAME_LIM];
char word[WORD_LIM];
};
int main(int argc, char *argv[]) {
if (argc < 3) {
printf("usage: ./a.out word filename1 filename2 filename3 filename4 filename5 ...n");
exit(EXIT_FAILURE);
}   
char word[WORD_LIM];
strcpy(word, argv[1]);
int files = argc - 2;
struct data *dataarray = (struct data *)malloc(sizeof(sizeof(struct data) * files));
if (!(dataarray)) {
perror("malloc");
exit(EXIT_FAILURE);                                                                                                                                                                                        
}   
for (int i = 0; i < files; i++) {
strcpy(dataarray[i].filename, argv[i + 2]);
for (int ii = 0; ii < strlen(dataarray[i].filename) + 1; ii++) {
printf("filename[%d] = %c (%d), argv[%d] = %dn",
i, dataarray[i].filename[ii], dataarray[i].filename[ii],
i, argv[i + 2][ii]);
}
}   
return 0;
}

我尝试了所有方法,但当我在argv中给出一些大文件名(如"../../../C Programs/chess.c"(时,malloc会产生错误。我想知道是什么使损坏的顶部尺寸。

sizeof(struct data) * files

是有效的大小。任何一个尺寸的倍数都是一个尺寸。

sizeof(sizeof(struct data) * files)

就像说CCD_ 5。我不知道这意味着什么,很可能运行时也没有正常运行。

sizeof(...)的使用限制为处理类型参数。

相关内容

最新更新