Я немного поиграю в C и попытаюсь написать тестовую программу для своего рода программирования в c программировании. Я получаю сообщение об ошибке заголовка в Visual Studio 2010. При использовании gcc я не получаю эту ошибку.Ошибка отладки: обнаружено повреждение кучи
Может ли кто-нибудь указать мне на то, что я делаю неправильно, кроме того, используя неправильный язык для oop и другие вне темы.
Похоже, что ошибка возникает, когда я освобождаю верхний объект в string_dispose, но я не уверен, если это действительно говорит о местоположении ошибки.
Также приветствуются любые предложения по улучшению кода. Использование синтаксиса массива не является вариантом, потому что я хочу попробовать арифметику указателей.
Файл заголовка "strings.h":
#ifndef STRINGS_H
#define STRINGS_H
struct strings
{
char* s;
int len;
};
typedef struct strings string;
void string_init(string* s, char* chars, int len);
string* string_new(char* chars, int len);
void string_dispose(string* s);
#endif
Исходный файл "strings.c":
#include "strings.h"
#include <stdlib.h>
void string_init(string* self, char* chars, int len)
{
int i;
self->s = (char*)malloc((len + 1) * sizeof(char*));
for (i = 0; i < len; i++)
{
*(self->s + i) = *(chars + i);
}
*(self->s + len) = '\0';
self->len = len;
}
string* string_new(char* chars, int len)
{
string* self;
self = (string*)malloc(sizeof(string*));
string_init(self, chars, len);
return self;
}
void string_dispose(string* self)
{
free(self->s);
free(self);
}
Основной файл:
#include <stdlib.h>
#include <stdio.h>
#include "strings.h"
int main(int argc, char* argv)
{
string* s;
int n = 5;
char* x = (char*)malloc((n + 1) * sizeof(char*));
x[0] = 'f';
x[1] = 'u';
x[2] = 'b';
x[3] = 'a';
x[4] = 'r';
x[5] = '\0';
s = string_new(x, n);
printf("the string: %s\n", s->s);
printf("the length: %d\n", s->len);
string_dispose(s);
printf("This is way more important");
return 0;
}
sizeof (char) всегда 1, так что просто '(len + 1)' будет достаточно. –
@SamiKuhmonen: Это даже будет слишком много и утерять память. Это та же ошибка, только с менее серьезными последствиями. – sth